2011-06-25 17 views
8

サブドメインに応じて異なるデータベースを使用するRails 3アプリケーションがあります。これを行うには、ApplicationControllerで "establish_connection"を使用します。delayed_jobに特定のdb接続を使用させるにはどうすればよいですか?

私はdelayed_job gemをバックグラウンド処理に使用しようとしていますが、その時点でアクティブになっているデータベース接続を使用しています。サブドメインデータベースに接続しています。

「共通」データベースを使用するようにしたいと思います。私はこのようなモデルでは、いくつかのモデルの呼び出し「establish_connection」のためにこれをやった:

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

私はこれを行うことができますどのように任意のアイデア?

+0

私たちはまったく同じ問題を抱えています。応答が大好きです。 BTW、JAG、あなたはサブドメインベースのマルチテナントを行うために何を使用していますか?私たちは宝石の製作に取り組んでおり、いくつかのインプットが大好きです。 –

+0

私のニーズに合ったものは見つけられませんでしたので、私は自分自身を転がしました。基本的に私は適切なDBに切り替える 'setup_subdomain' before_filterを持っています。あなたの宝石やリンクをチェックしたいですか? – JAG

+0

Github上の唯一の方法である場合はdelayed_job gemを修正し、gemfileに:git =>を使用するようにしてください。 –

答えて

17

これはあなたが知る必要があるものです。 DelayedJobの宝石をあなたのアプリに含めると、ジョブが保存されているテーブルを作成するための移行が作成されますが、モデルは作成されません。これは、DelayedJobに既に宝石にモデルが含まれている(つまりDelayed::Job)ためです。自分のモデルと同じように、このモデルを少し修正するだけです。これはイニシャライザで行うことができます。

DelayedJobを設定するためのイニシャライザが既に用意されている場合があります。

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

私たちは、あなたがDelayedJobモデルに同じことをやった:だから、あなたは1を持っていない場合、我々はそれに以下を追加し、今、delayed_job_config.rbそれを呼ぶことにします(config/initializersに)あなたの初期化子を作成しますあなた自身のモデルにしました。今DelayedJobはその接続を使用してDBにジョブを配置します。

+0

あなたがこれを投稿して以来、しばらくしてきましたが、私はこれを全く手に入れることができません。上記のようにして、Webサーバーを再起動しましたが、DJは設定ファイルで指定したものではなく、現在の環境のデータベースにジョブをスティックします。デバッグ方法もわかりません。 –

+1

答えは少しはっきりしませんが、この行 'establish_connection ActiveRecord :: Base.configurations ["#{Rails.env} "]'はあなたの遅延した仕事を、 'Rails.env'をあなたが実際に望むどんなデータベース接続でも置き換える必要があります。 'establish_connection ActiveRecord :: Base.configurations [" common "]' – skorks

+0

ああ、児童犯罪に間違いました。ありがとう。 –

関連する問題