2015-07-17 2 views
0

Я пытаюсь вызвать Rails.application.eager_load! в моей рейк-задаче. Это ошибка, которую я получаю.Rails.application.eager_load! не работает в скрипте rake

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> 

Глядя в это дальше, я обнаружил, что autoload_paths был пуст в моем файле active_support/dependencies.rb. Об этом должен был заботиться инициализатор: set_autoload_paths в engine.rb. Однако инициализатор никогда не вызывается. Когда я перебираю eager_load и вручную вызываю его сам, ошибка исчезает. Почему не вызывается инициализатор?

UPDATE: когда я звоню Rails.initialize! он тогда работает. Но это похоже на здоровенный звонок. Может кто-нибудь объяснить, что происходит?

+0

The Rails.application.eager_load! был вызван до того, как началась моя рейк-задача, переместив ее в задачу грабли, она работает сейчас. – TheJKFever

ответ

0

Я думаю, что вы можете найти ответ на вопрос о причинах здесь: Rails 3 rake task can't find model in production

У меня аналогичная проблема раньше:

[email protected]:~/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/environments/production.rb это работает для меня. Вы также можете установить $rails_rake_task = true в свой Rakefile вручную.