【问题标题】:uninitialized constant ModelObserver - Rake task on Heroku未初始化的常量 ModelObserver - Heroku 上的 Rake 任务
【发布时间】:2012-12-10 15:17:52
【问题描述】:

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

未初始化的常量 BookingObserver

ActiveRecord::Base在线。如果我不包括那条线,那么我根本无法使用模型(导致类似的错误只是模型而不是观察者)

【问题讨论】:

标签: ruby-on-rails activerecord heroku rake


【解决方案1】:

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

【讨论】:

  • 这对我不起作用,但我能够通过注释掉 config.threadsafe! 来解决问题。感谢您为我指明正确的方向。
【解决方案2】:

您的 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

【讨论】:

  • 已经在这样做了。它在包含“ActiveRecord::Base”后在本地工作,因为 Rails 中的这个错误:github.com/rails/rails/issues/882。所以我想问题是 Heroku 而不是我的代码。将尝试与他们联系。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我在application.rb中添加了这段代码

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

    就在打电话之前:

    config.active_record.observers = [:user_observer]

    我认为因为我的应用程序,它不会自动发现模型/观察者/下的观察者目录

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 2011-06-02
      • 1970-01-01
      • 2021-05-31
      • 2011-10-07
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多