2010-11-20 16 views
9

का उपयोग शुरू नहीं करेगा मैं कैपिस्ट्रानो नुस्खा का उपयोग कर देरी की प्रक्रिया शुरू नहीं कर सकता। मुझे जो त्रुटि मिल रही है वह यहां दी गई है।विलंबित कार्य कैपिस्ट्रानो

/usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `mkdir': File exists - /my_app/server/releases/20101120001612/tmp/pids (Errno::EEXIST) 

यहाँ Capistrano कोड है (नोट: मैं कोशिश की है दोनों/आदेशों को पुनः आरंभ शुरू) तैनाती लॉग से

after "deploy:restart", "delayed_job:start" 
task :start, :roles => :app do   
    run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -n 2 start" 
end 

अधिक विस्तार त्रुटियों -

executing command 
[err :: my_server] /usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `mkdir': File exists - /my_app/server/releases/20101120001612/tmp/pids (Errno::EEXIST) 
[err :: my_server] from /usr/local/lib/ruby/gems/1.9.1/gems/delayed_job-2.1.1/lib/delayed/command.rb:62:in `daemonize' 
[err :: my_server] from script/delayed_job:5:in `<main>' 
    command finished 
failed: "sh -c 'cd /my_app/server/current; RAILS_ENV=production script/delayed_job -n 3 restart'" on myserevr 

यह एक रेल 3 है ऐप (v3.0.3)

उत्तर

3

यह कैसे मैं समस्या का समाधान हो गया है इससे पहले कि इस निर्देशिका के मोर्चे, मैं का उपयोग कर "--pid-निर्देशिका" एक स्पष्ट पीआईडी ​​की निर्देशिका पैरामीटर पारित कर दिया। सुनिश्चित नहीं है कि यह सही है, लेकिन यह काम किया।

task :restart, :roles => :app do 
    run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -n #{dj_proc_count} --pid-dir=#{app_root}/shared/dj_pids restart" 
end 
1

crea जोड़ें

after "deploy:restart", "delayed_job:start" 
task :start, :roles => :app do 
    run "mkdir #{current_path}/tmp/pids" 
    run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job -n 2 start" 
end 
9

मैं भी यह त्रुटि आई और मुद्दों की एक जोड़ी पाया:

  • सुनिश्चित करें कि आप एक shared/pids फ़ोल्डर है।
  • आप सही हुक सेटअप

आपका deploy.rb स्क्रिप्ट को शामिल करना चाहिए है सुनिश्चित करें:

require "delayed/recipes" 

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

मैं एक पुराने पद से हुक की नकल की थी और वे अब गलत दिखाई देते हैं। ये वास्तविक देरी_job रेसिपी फ़ाइल टिप्पणियों से हैं।

मुझे विश्वास है कि cap deploy:setup को pids फ़ोल्डर बनाना चाहिए, लेकिन मैंने चीजों को एक अलग तरीके से सेट किया और यह नहीं बनाया गया था। app/current/tmp/pidsapp/shared/pids से लिंक और यह वजह है कि झूठी निर्देशिका त्रुटि मौजूद है।

+1

वही यहाँ। कैपिस्ट्रानो की छोटी-छोटी 'साझा_चल्डरेन' सेटिंग का उपयोग करते समय हुआ। साझा में symlinking द्वारा हल: 'ln -s tmp/pids'। – Zubin

+0

बहुत उपयोगी उत्तर मेरी समस्या हल हो गई। बहुत बहुत धन्यवाद! – wallerjake

+0

@Zubin, @wallerjake और @PilT: मुझे लगता है कि मेरे पास एक ही सिम्लिंकिंग-समस्या है: 'वर्तमान/tmp/pids ->/var/www/apps/production.myserver.de/साझा/pids' तो क्या मैं '/var/www/apps/production.myserver.de/shared'- निर्देशिका पर जाना होगा और' ln -s tmp/pids'-command दर्ज करें? मैं यूनिक्स-कमांड में वास्तव में दृढ़ नहीं हूं :( धन्यवाद! – levitas111

20

एक ही समस्या को देखते हुए।

यह पता चला कि मैं ~/apps/application_name/shared/pids निर्देशिका खो रहा था।

अंततः इसे बनाने से यह समस्या दूर हो गई।

कस्टम dj_pids निर्देशिका सेट अप करने की कोई आवश्यकता नहीं है।

0

के बाद से निर्देशिका के निर्माण के सस्ते और तेज है, तो निम्न कॉलबैक का उपयोग करें:

before 'deploy', 'deploy:setup' 

यह सुनिश्चित होगा कि संरचना प्रत्येक तैनाती से पहले हमेशा वहाँ है।

1

मुझे एक ही समस्या थी। यह पता चला कि मौजूदा

application_name/साझा/pids/delayed_job.main था।पिड

फ़ाइल, जिसमें गलत मालिक अनुमतियां थीं, जो तैनाती विफल होने का कारण बन रही थीं। इस फ़ाइल की अनुमतियों को ठीक करने के लिए मेरे लिए समस्या हल हो गई।

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