问题描述
|
我有一个Rails 3应用程序,该应用程序根据子域使用不同的数据库。我通过在ApplicationController中使用“建立连接”来做到这一点。
现在,我正在尝试使用delay_job gem进行一些后台处理,但是它使用了当时处于活动状态的数据库连接。它正在连接到子域数据库。
我想强迫它使用\“ common \”数据库。对于某些在模型中调用“建立连接”的模型,我已经这样做:
class Customer < ActiveRecord::Base
establish_connection ActiveRecord::Base.configurations[\"#{Rails.env}\"]
...
end
知道我该怎么做吗?
解决方法
这是您需要知道的。当您在应用程序中包含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将使用该连接将作业放入数据库中。