2

我正在将rails应用程序从2.3.11升级到3.0(最终为3.1),并将我的delayed_job gem从2.0.4更改为2.1.4。在rails 3中更改后端ActiveRecord数据库用于delayed_job 3

我的postgres数据库中已经有一个delayed_jobs表,但它与我的rails应用程序的默认值不同。例如,在开发模式下,我使用'development'db,但是我的一些关系,包括delayed_jobs,位于'development_stats'db。其他使用这个数据库的模型可以很好地访问它。

在我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' 

从我读过的其他东西看来,当宝石变成loa时,Delayed :: Job模型会被加载ded,所以在初始化器中更改db已经太晚了。有没有人遇到这个问题,并能找到一种方法来告诉delayed_job使用不同的数据库?

预先感谢任何帮助,您可以给我...

回答

1

这可能帮助,改变了delayed_job的表,我发现我需要强制轨复位的相关数据库架构的“名字”的时候该模型,如下所示:

延迟::后端的ActiveRecord :: :: Job.set_table_name' 延迟::后端的ActiveRecord :: :: Job.reset_column_information

0

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

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