2011-09-17 8 views
1

私は3.1へのアップグレードを進めています。rspec/rakeの問題 - Rake :: DSLのグローバルメソッドが何とか私のモデルを壊している

私は明らかにRakeによって上書きされる 'リンク'メソッドを持つモデル(Mongoidを使用しています)を持っています。私はこのメッセージを受け取っています:

WARNING: Global access to Rake DSL methods is deprecated. Please include 
... Rake::DSL into classes and modules which use the Rake DSL methods. 
WARNING: DSL method Profile#link called at /Users/jeffdeville/Documents/code/ruby/wg/app/models/profile.rb:62:in `block in eql?' 

このメソッドは解決されているので、私はスタックトレースまたは何も持っていません。これは私のrspecsで起こりますが、問題はコンソールでは起こりません。

ジェムファイルは以下のとおりです。

答えがわからない場合でも、私がここでどのようにデバッグプロセスにアプローチするかについての提案があれば、それは素晴らしいことでしょう。

api_client = API::Client 
api_model = 'task' #this is dynamic in reality... 
api_client.send(api_model).list 

熊手のグローバルDSL タスク方法が何らかの理由で送信をつかうましたが、呼び出しが働いていた:私は、以下のなかったとき、私は同様の問題を抱えていた

source 'http://rubygems.org' 

gem 'rails', "3.1.0" 
gem 'rake' 
gem 'mail' 

gem 'compass', "~> 0.12.alpha.0" 
gem 'jquery-rails' 
gem 'haml-rails' 
gem "html5-boilerplate" 

gem 'mini_fb', :git => 'git://github.com/jeffdeville/mini_fb.git' 
gem "json" 
gem "bson" 
gem "bson_ext" 
gem 'sucker' 
gem 'crack', :git => 'git://github.com/ericgj/crack.git' 
gem 'hoptoad_notifier' 
gem 'httparty' 
gem 'facebooker2' 
gem 'delayed_job' 
gem 'delayed_job_mongoid' 
gem 'unicorn' 
gem 'hirefireapp' 
gem 'mogli', :git => 'https://github.com/jeffdeville/mogli.git' 
gem 'typhoeus' 
gem 'koala' 
gem 'foreman' 
gem 'heroku' 
gem 'rbing' 
gem 'rmagick' 
gem 'mini_magick' 
gem 'aws-sdk' 
gem 'mechanize' 

# Gems used only for assets and not required 
# in production environments by default. 
group :assets do 
    gem 'sass-rails', " ~> 3.1.0" 
    gem 'coffee-rails', "~> 3.1.0" 
    gem 'uglifier' 
end 

group :development, :test do 
    gem 'awesome_print' 
    gem 'pry' 
end 

group :development do 
    gem 'rails3-generators' 
    gem 'coffee-script' 
    gem 'guard' 
    gem 'guard-coffeescript' 
    gem 'guard-livereload' 
    gem 'guard-rspec' 
    gem 'guard-spork' 
    gem 'guard-bundler' 
    gem 'mailcatcher' 
    gem 'foreman' 
end 

group :test do 
    gem "factory_girl_rails" 
    gem 'fuubar' 
    gem 'spork', '~> 0.9.0.rc' 
    gem 'ruby-debug19' 
    gem "rspec" 
    gem "rspec-given" 
    gem "rspec-rails" 
    gem 'mocha' 
    gem "bourne" 
    gem 'webmock' 
    gem 'vcr' 
    gem 'jasmine' 
    gem 'email_spec' 
    gem 'timecop' 
end 

group :mac do 
# if RUBY_PLATFORM =~ /darwin/i 
    gem 'rb-fsevent' 
    gem 'growl' 
# end 
end 
+0

はどうなりますか?あなたが安全にそれを行うことができるかどうかは分かりませんが、それは私が始めようとしている場所です - 'link'が定義されているようで、もはや使用できません。 –

+0

方法がどこから来るかを検査するいくつかの方法があります。これはデバッグに役立つかもしれません。 pryを使い、メソッドの所有者またはsource_location(ルビ1.9)を見てください – phoet

答えて

1

-Jeff

私はそれを直接(sendを使わずに)呼び出すとします。結局のところ、私はちょうど子牛に動的な呼び出しを変更しました。

eval "api_client.#{api_model}.list" 

これは遅いですが、最終的にはRakeからグローバルDSLを削除するときに変更します。あなたは一時的に(のcontrib/sys` `で)熊手の` Sys`モジュールを削除する場合

HTH、YMMV ;-)

+0

ありがとうジョー。いい案! –

関連する問題