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

时间:2011-06-25 16:29:38

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

我有一个Rails 3应用程序,根据子域使用不同的数据库。我通过在ApplicationController中使用“establish_connection”来实现这一点。

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

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

class Customer < ActiveRecord::Base
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
  ...
end

知道我该怎么办?

1 个答案:

答案 0 :(得分:17)

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

您可能已经有一个初始化程序来配置DelayedJob,如果是这样,您可以在那里执行此操作,如果不是,则需要创建一个。因此,如果您没有初始化程序,请创建初始值设定项(config/initializers),我们将其称为delayed_job_config.rb,现在添加以下内容:

Delayed::Job.class_eval do
  establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
end

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

相关问题