2011-08-26 14 views
8

पर आमंत्रित करें मेरे पास देरी_job कार्यों के लिए एक समर्पित सर्वर है। मैं पर केवल पर देरी_job श्रमिकों को शुरू करना, बंद करना और पुनरारंभ करना चाहता हूं। मैं delayed_job द्वारा प्रदान की गई capistrano व्यंजनों का उपयोग कर रहा हूँ।केवल देरी_job capistrano कार्यों को विशिष्ट सर्वर

before "deploy:restart", "delayed_job:stop" 
after "deploy:restart", "delayed_job:start" 

after "deploy:stop", "delayed_job:stop" 
after "deploy:start", "delayed_job:start" 

अब मैं उन हुक करना चाहते हैं केवल एक अलग delayed_job सर्वर (role :delayed_job <ip address>) पर लागू होते हैं:

जब मैं केवल 1 सर्वर था, यह मेरा config था। क्या यह सुंदर ढंग से करना संभव है? क्या मुझे प्रत्येक देरी_job कार्यों को मेटा कार्य में लपेटना है? या अपने कार्यों को लिखें और देरी नौकरी द्वारा प्रदान किए गए लोगों का उपयोग न करें?

उत्तर

12

जब आप Capistrano में कोई कार्य परिभाषित करते हैं तो आप कार्य को निष्पादन को विशिष्ट भूमिका (ओं) तक सीमित कर सकते हैं। जिस तरह से आप :role विकल्प पास कर रहे हैं।

ऐसा लगता है कि default delayed_job Capistrano recipe ऐसा करता है।

desc "Stop the delayed_job process" 
task :stop, :roles => lambda { roles } do 
    run "cd #{current_path};#{rails_env} script/delayed_job stop" 
end 

स्रोत कोड के अनुसार, कार्य :delayed_job_server_role विन्यास चर से भूमिकाओं की सूची को हासिल करेगा।

आपकी समस्या को वापस, सर्वर की एक विशिष्ट समूह में कार्य के निष्पादन के संकीर्ण करने के लिए, अपने deploy.rb

role :worker, "192.168.1.1" # Assign the IP of your machine 

में एक नई भूमिका (उदाहरण के कार्यकर्ता के लिए) को परिभाषित तो उस नाम

को :delayed_job_server_role सेट
set :delayed_job_server_role, :worker 

यह सब कुछ है। अब कार्य निष्पादित किए जाएंगे, लेकिन केवल :worker भूमिका में सूचीबद्ध सर्वरों के लिए।

+0

हाँ! मैं बहुत खुश हूँ। (और मैं दस्तावेज चलाउंगा जो उनके विकी पर ध्वज ...) –

संबंधित मुद्दे