2010-11-20 70 views
9

我無法使用卡西斯拉諾的配方啓動延遲的工作過程。這是我得到的錯誤。延遲的工作不會開始使用Capistrano

/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 

這是Rails 3 app(v3.0.3

回答

3

這是我如何解決這個問題,我通過使用「-pid-dir」明確的pids目錄參數。不知道這是否完美,但它的工作。

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" 

我會從舊後複製的鉤子,他們似乎現在是不正確的。這些來自實際的delayed_job配方文件註釋。

我相信cap deploy:setup應創建pids文件夾,但我設置了一個不同的方式,它並沒有創建。 app/current/tmp/pids鏈接到app/shared/pids並且這導致了錯誤的目錄存在錯誤。

+1

同樣在這裏。使用卡皮斯特拉諾鮮爲人知的'shared_children'設置時發生。通過共享中的symlinking解決:'ln -s tmp/pids'。 – Zubin 2013-01-02 23:22:16

+0

非常有用的答案解決了我的問題。非常感謝! – wallerjake 2014-05-12 02:05:08

+0

@Zubin,@wallerjake和@PhilT:我想我有同樣的符號鏈接問題: 'current/tmp/pids - >/var/www/apps/production.myserver.de/shared/pids' 必須去'/var/www/apps/production.myserver.de/shared'-目錄並輸入'ln -s tmp/pids'命令?我在Unix命令中並不確定:( 謝謝! – levitas111 2014-06-25 11:23:30

20

看到同樣的問題。

原來我錯過了~/apps/application_name/shared/pids目錄。

最後創建它使這個問題消失。

無需設置自定義dj_pids目錄。

0

由於目錄的創建既便宜又快捷,使用下面的回調:

before 'deploy', 'deploy:setup' 

這將確保結構是永遠存在的每一個部署之前。

1

我有同樣的問題。結果發現存在

application_name/shared/pids/delayed_job.main。pid

文件,其擁有不正確的所有者權限,導致部署失敗。解決這個文件的權限解決了我的問題。