【问题标题】:rspec / rake issue - Rake::DSL global methods are clobbering my model somehowrspec / rake 问题 - Rake::DSL 全局方法正在以某种方式破坏我的模型
【发布时间】:2011-11-19 02:28:09
【问题描述】:

我正在升级到 3.1,但遇到了问题。

我有一个模型(使用 Mongoid),显然它的“链接”方法被 Rake 覆盖。我收到了这条消息:

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 中,但问题不会发生在控制台中。

Gemfile 在下面。

即使您不知道答案,如果您对我在这里如何处理调试过程有任何建议,那就太好了。

-杰夫

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

【问题讨论】:

  • 如果你暂时移除 rake 的 Sys 模块(在 contrib/sys 中)会发生什么?不确定您是否可以安全地做到这一点,但这就是我要开始的地方——它似乎是定义 link 的地方,它可能不再使用了。
  • 有一些方法可以检查方法的来源。这可能有助于调试。使用 pry 然后查看方法所有者或 source_location(在 ruby​​ 1.9 中)

标签: ruby rspec rake ruby-on-rails-3.1 rspec-rails


【解决方案1】:

我在执行以下操作时遇到了类似的问题:

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

Rake 的全局 DSL task 方法由于某种原因破坏了发送,但如果我直接调用它(不使用发送),调用就会起作用。最后,我只是将动态调用更改为小牛肉。

eval "api_client.#{api_model}.list"

它比较慢,但当他们最终从 Rake 中删除 Global DSL 时,我会改回来。

HTH,YMMV ;-)

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2014-09-10
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多