2011-06-25 14 views
8

Alt alana bağlı olarak farklı veritabanlarını kullanan bir Rails 3 uygulamasına sahibim. ApplicationController'da "kuruluş_konu" kullanarak bunu yapıyorum.Belirli bir db bağlantısını kullanmak için delayed_job'yi nasıl zorlayabilirim?

Şimdi, arka plan işlemi yapmak için delayed_job gemini kullanmaya çalışıyorum, ancak o anda etkin olan veritabanı bağlantısını kullanıyor. Alt alan veritabanına bağlanıyor.

"Ortak" veritabanını kullanmak için zorlamak istiyorum. Böyle modelinde bazı modeller çağrı "establish_connection" için yaptık:

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

ben bunu nasıl biliyor musunuz?

+0

Aynı sorunu yaşıyoruz. Bir cevabı çok isterim. BTW, JAG, subdomain tabanlı multitenancy yapmak için neler kullanıyorsunuz? Bir gem üzerinde çalışıyoruz ve bazı girdilerden hoşlanırız. –

+0

İhtiyacım için uygun bir şey bulamadığım için kendiminkini yaptım. Temel olarak, uygun DB'ye geçiş yapan bir 'setup_subdomain' before_filter'ım var. Gemini kontrol etmek ister misin? – JAG

+0

Olası Github'da tek yol ise ve onu kullanmanız gerekirse: wait = _ems_ geminde geciktirilmiş_made 'yi değiştirin. –

cevap

17

Bilmeniz gerekenler. Uygulamanızda DelayedJob gemini eklediğinizde, işlerin depolandığı tabloyu oluşturmak için bir geçiş oluşturursunuz, ancak bir model oluşturmazsınız. Bunun sebebi, DelayedJob'un halihazırda gemide bulunan bir modele sahip olmasıdır (ör. Delayed::Job). Yapmanız gereken şey, kendi modellerinizle yaptığınız gibi bu modeli hafifçe kaldırmanız. Bunu bir başlatıcıda yapabilirsiniz.

DelayedJob'u yapılandırmak için bir başlatıcınız olabilir, eğer varsa bunu yapabilmeniz için bir tane oluşturmanız gerekir. Yani, bir tane yoksa, biz delayed_job_config.rb arayacağım (config/initializers içinde) başlatıcı oluşturmak, şimdi aşağıdakileri ekleyin: Biz DelayedJob modeli aynı şeyi size yaptıklarına

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

kendi modellerine yaptım. Şimdi DelayedJob bu bağlantıyı DB'ye iş koymak için kullanacaktır.

+0

Bunu göndermiş olduğunuz zamandan bir süre geçti ama bunu hiç işe yaramadı mı? Tam olarak yukarıda söylediğim gibi yaptım, web sunucumu yeniden başlattım, ancak DJ hala dosyamı mevcut ortamımın veritabanına yapıştırıyor, benim yapılandırma dosyasımda belirttiğimden çok. Ya da nasıl hata ayıklanır. –

+1

Cevap biraz açık değil sanırım, ama bu line 'kurmak Active_Connection :: Base.configurations [" # {Rails.env} "]' gecikmeli işinizi sadece mevcut ortamınızı takip edecek 'Rails.env' yerine aslında istediğiniz herhangi bir veritabanı bağlantısına sahip olmanız gerekir. 'kurmak_connection ActiveRecord :: Base.configurations [" ortak "]' – skorks

+0

Argh, bir öğrenci hatası yaptı. Teşekkürler. –

İlgili konular