【问题标题】:Rails.application.eager_load! not working in rake scriptRails.application.eager_load!不在 rake 脚本中工作
【发布时间】:2015-07-17 16:27:03
【问题描述】:

我正在尝试调用 Rails.application.eager_load!在我的耙子任务中。 这是我遇到的错误。

LoadError: No such file to load -- application_controller
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:457:in `load'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:457:in `block in load_file'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:647:in `new_constants_in'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:456:in `load_file'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:354:in `require_or_load'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:317:in `depend_on'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:233:in `require_dependency'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:473:in `block (2 levels) in eager_load!'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:472:in `each'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:472:in `block in eager_load!'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:470:in `each'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:470:in `eager_load!'
/home/jkoehms/TECC/tecc/lib/tasks/populate.rake:3:in `<top (required)>'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `block in load'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:659:in `block in run_tasks_blocks'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:659:in `each'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:659:in `run_tasks_blocks'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/application.rb:452:in `run_tasks_blocks'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/gems/railties-4.2.1/lib/rails/engine.rb:453:in `load_tasks'
/home/jkoehms/TECC/tecc/Rakefile:6:in `<top (required)>'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/bin/ruby_executable_hooks:15:in `eval'
/home/jkoehms/.rvm/gems/ruby-2.0.0-p643/bin/ruby_executable_hooks:15:in `<main>

进一步研究,我发现我的 active_support/dependencies.rb 文件中的 autoload_paths 是空的。这应该由 engine.rb 中的 :set_autoload_paths 初始化程序处理。然而,初始化程序永远不会被调用。当我进入 eager_load 并自己手动调用它时,错误就消失了。为什么没有调用初始化程序?

更新: 当我调用 Rails.initialize 时!然后它就可以工作了。但这似乎是一个沉重的呼吁。有人可以解释发生了什么吗?

【问题讨论】:

  • Rails.application.eager_load!在我的 rake 任务开始之前被调用,通过将它移动到它现在工作的 rake 任务中。

标签: ruby-on-rails dependencies activesupport


【解决方案1】:

我想你可以在这里找到原因的答案:Rails 3 rake task can't find model in production

我之前也有类似的问题:

app@LacosteDev-aws:~/app/current$ rake resque:preload QUEUE=* --trace
** Invoke resque:preload (first_time)
** Invoke resque:setup (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute resque:setup
** Execute resque:preload
rake aborted!
NameError: uninitialized constant ResourcesController
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/bundler/gems/qor-c93ebb95226f/widget/app/controllers/resources/widget_controller.rb:2:in `const_missing'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/bundler/gems/qor-c93ebb95226f/widget/app/controllers/resources/widget_controller.rb:2
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:225:in `load_dependency'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `require'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:348:in `require_or_load'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:302:in `depend_on'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:214:in `require_dependency'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:417:in `eager_load!'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:416:in `each'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:416:in `eager_load!'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:414:in `each'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:414:in `eager_load!'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/activesupport-3.1.3/lib/active_support/dependencies.rb:240:in `to_proc'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/application/railties.rb:8:in `each'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/application/railties.rb:8:in `all'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/railties-3.1.3/lib/rails/engine.rb:412:in `eager_load!'
/media/ebsdisk/app/releases/20150630071432/vendor/bundle/ruby/1.8/gems/resque-1.25.2/lib/resque/tasks.rb:61

我只是将config.dependency_loading = true if $rails_rake_task 添加到config/environments/production.rb 它对我有用。 您也可以在 Rakefile 中手动设置$rails_rake_task = true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2010-11-04
    • 2011-11-05
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    相关资源
    最近更新 更多