Rake任务执行ActiveRecord模型操作。我在rake任务中添加了ActiveRecord::Base
,这在本地有效,但在Heroku上没有,导致出现此错误:
未初始化的常量BookingObserver
在ActiveRecord::Base
的行上。如果我不包含该行,那么我就不能在所有中使用该模型(仅对模型而不是观察者导致类似的错误)。
答案 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
答案 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 /
下