未初始化的常量ModelObserver - Heroku上的Rake任务

时间:2012-12-10 15:17:52

标签: ruby-on-rails activerecord heroku rake

Rake任务执行ActiveRecord模型操作。我在rake任务中添加了ActiveRecord::Base,这在本地有效,但在Heroku上没有,导致出现此错误:

  

未初始化的常量BookingObserver

ActiveRecord::Base的行上。如果我不包含该行,那么我就不能在所有中使用该模型(仅对模型而不是观察者导致类似的错误)

4 个答案:

答案 0 :(得分:5)

我使用的是config.threadsafe!它禁用依赖加载(因此不加载观察者,只加载模型)。解决方案是在$ rails_rake_task到环境时添加config.dependency_loading = true。

答案 1 :(得分:4)

您的rake任务需要在执行ActiveRecord代码之前加载Rails环境。

# lib/tasks/my_tasks.rake
task :my_task => :environment do
  # Your task here
  # it has access to the Rails environment now
end

另请参阅this similar issueRailscast on custom rake tasks

答案 2 :(得分:3)

我能够通过在production.rb中注释config.threadsafe!来解决此问题。

答案 3 :(得分:0)

我将此代码添加到了application.rb

config.autoload_paths += Dir[ Rails.root.join('app', 'models', '**/') ]

在致电之前

config.active_record.observers = [:user_observer]

我认为因为我的应用程序不会自动发现我的观察者的目录,该目录位于models / observers /