我有一个Rails 3应用程序,根据子域使用不同的数据库。我通过在ApplicationController中使用“establish_connection”来实现这一点。
现在我正在尝试使用delayed_job gem进行一些后台处理,但是它使用了那时它处于活动状态的数据库连接。它正在连接到子域数据库。
我想强迫它使用“常用”数据库。我已经为一些在模型中调用“establish_connection”的模型做了这样的事情:
class Customer < ActiveRecord::Base
establish_connection ActiveRecord::Base.configurations["#{Rails.env}"]
...
end
知道我该怎么办?
答案 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将使用该连接将作业放入数据库。