【问题标题】:After upgrading to Rails 3.2 my rake tasks are broken升级到 Rails 3.2 后,我的 rake 任务被破坏
【发布时间】:2012-02-21 08:12:13
【问题描述】:

升级到 Rails 3.2 后,我的 rake 任务无法再自动加载模型。

以下在 rails 3.1 中工作:

09:04:14 /srv/www/gamersmafia/current$ rake --trace gm:update_default_skin_styles
rake aborted!                                                                   
No such file to load -- notification                                            
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:317:in `depend_on'
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:225:in `require_dependency'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:439:in `eager_load!'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:438:in `each' 
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:438:in `eager_load!'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:436:in `each' 
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:436:in `eager_load!'
/srv/www/gamersmafia/current/lib/tasks/update_games_and_factions_sprite.rake:1
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:245:in `load'
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:245:in `load'
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:236:in `load_dependency'
/usr/lib/ruby/gems/1.8/gems/activesupport-3.2.1/lib/active_support/dependencies.rb:245:in `load'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:425:in `load_tasks'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:425:in `each' 
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/engine.rb:425:in `load_tasks'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/application.rb:145:in `load_tasks'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/railtie/configurable.rb:30:in `send'
/usr/lib/ruby/gems/1.8/gems/railties-3.2.1/lib/rails/railtie/configurable.rb:30:in `method_missing'
/srv/www/gamersmafia/current/Rakefile:7                                         
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `load_rakefile'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `run' 
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/usr/lib/ruby/gems/1.8/gems/rake-0.9.2.2/bin/rake:33                            
/usr/local/bin/rake:19:in `load'                                                
/usr/local/bin/rake:19

我的应用程序的代码是开源的,所以你可以在这里查看:

https://github.com/slnc/gamersmafia

我所做的唯一修改是添加一个

“Rails.application.eager_load!”行到上面显示的 rake 任务的开头。没有它就不会加载“皮肤”库。

更新 我尝试通过在上面显示的堆栈跟踪的每一行添加 puts 语句来调试它,我可以看到如下内容:

eager_load_path: /srv/www/gamersmafia/current/app/mailers
file found: /srv/www/gamersmafia/current/app/mailers/notification.rb
require_dependency notification
... notification
rake aborted!

这大致表明 rails 正在查找 notification.rb 文件,但是当它尝试加载它时却找不到。

【问题讨论】:

  • 它看起来与 Rails 3.2 无关。我回到 Rails 3.1,它也失败了。我最近做了很多重构,将代码从供应商/插件移到配置/初始化程序中,这可能是它现在失败的原因。
  • 奇怪的是我必须添加一个“Rails.application.eager_load!”线。我的理解是在任务中添加 :environment 参数会强制 Rails 加载。

标签: ruby-on-rails ruby ruby-on-rails-3.2


【解决方案1】:
gem install notification

可能只是解决问题,看到No such file to load -- notification 表示require 'notification' 中的失败。

【讨论】:

  • 感谢独奏,但这似乎不起作用。我确实有一个名为“通知”的模型,它位于 app/mailers 目录中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-23
相关资源
最近更新 更多