如何强制delayed_job使用特定的数据库连接?

JAG*_*JAG 8 delayed-job ruby-on-rails-3

我有一个Rails 3应用程序,根据子域使用不同的数据库.我通过在ApplicationController中使用"establish_connection"来完成此操作.

现在我正在尝试使用delayed_job gem来进行一些后台处理,但是它使用了那时它处于活动状态的数据库连接.它正在连接到子域数据库.

我想强迫它使用"通用"数据库.我已经为一些在模型中调用"establish_connection"的模型做了这样的事情:

class Customer < ActiveRecord::Base
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
  ...
end
Run Code Online (Sandbox Code Playgroud)

知道我该怎么办?

sko*_*rks 17

这是你需要知道的.当您在应用程序中包含DelayedJob gem时,您可以为其创建一个迁移,以创建存储作业的表,但不创建模型.这是因为DelayedJob已经有一个包含在gem中的模型(即Delayed::Job).您需要做的是稍微修补此模型,就像您使用自己的模型一样.您可以在初始化程序中执行此操作.

您可能已经有一个初始化程序来配置DelayedJob,如果是这样,您可以在那里执行此操作,如果不是,则需要创建一个.所以,config/initializers如果你没有初始化器(in ),我们将调用它delayed_job_config.rb,现在添加以下内容:

Delayed::Job.class_eval do
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
end
Run Code Online (Sandbox Code Playgroud)

我们对DelayedJob模型做了与你自己的模型相同的事情.现在,DelayedJob将使用该连接将作业放入数据库.