【问题标题】:Change backend ActiveRecord database for delayed_job in rails 3在 Rails 3 中更改 delay_job 的后端 ActiveRecord 数据库
【发布时间】:2011-11-28 21:35:06
【问题描述】:

我正在努力将 rails 应用程序从 2.3.11 升级到 3.0(然后最终升级到 3.1),并将我的延迟作业 gem 从 2.0.4 更改为 2.1.4。

我的 postgres 数据库中已经有一个 delay_jobs 表,但它与我的 rails 应用程序的默认数据库不同。例如,在开发模式下,我使用“开发”数据库,但我的一些关系,包括延迟工作,位于“开发统计”数据库上。其他使用该数据库的模型可以正常访问。

在我的config/initializers/delayed_job.rb 中,对于delayed_job 2.0.4:

Delayed::Worker.backend = :active_record
Delayed::Worker.destroy_failed_jobs = false

class Delayed::Job
  establish_connection Rails.configuration.database_configuration["#{Rails.env}_stats"]
end

现在,当我尝试使用delayed_job 时出现这些错误:

ActiveRecord::StatementInvalid: PGError: ERROR:  relation "delayed_jobs" does not exist 
LINE 1: DELETE FROM "delayed_jobs"

NoMethodError: undefined method `name' for nil:NilClass
    ~/.rvm/gems/ruby-1.9.2-p290/gems/arel-2.0.10/lib/arel/visitors/to_sql.rb:56:in `block in visit_Arel_Nodes_InsertStatement'

从我读过的其他内容看来,Delayed::Job 模型现在在加载 gem 时加载,因此在初始化程序中更改数据库为时已晚。有没有其他人遇到过这个问题并且能够找到一种方法来告诉delayed_job 使用不同的数据库?

提前感谢您能给我的任何帮助...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord delayed-job


    【解决方案1】:

    这可能会有所帮助,在更改延迟作业表的“名称”时,我发现我需要强制 rails 重置模型的关联数据库架构,如下所示:

    延迟::Backend::ActiveRecord::Job.set_table_name '' Delayed::Backend::ActiveRecord::Job.reset_column_information

    【讨论】:

      【解决方案2】:

      我在delayed_job 4.0.2 的应用程序的boot.rb 文件(在Padrino 下)中发现了以下作品:

      Delayed::Backend::ActiveRecord::Job.establish_connection xxxxx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多