Задержка не начнется с использованием Capistrano - PullRequest
10 голосов
/ 20 ноября 2010

Я не могу запустить процесс отложенной работы по рецепту капистрано.Вот ошибка, которую я получаю.

/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 ( v3.0.3 )

Ответы [ 6 ]

21 голосов
/ 13 декабря 2011

Видя ту же проблему.

Оказывается, я пропустил каталог ~/apps/application_name/shared/pids.

В конце концов, его создание устранило эту проблему.

Нет необходимости настраивать пользовательский каталог dj_pids.

10 голосов
/ 10 ноября 2011

Я также получил эту ошибку и обнаружил пару проблем:

  • Убедитесь, что у вас есть папка 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, и это привело к ошибке "Ложный каталог существует".

4 голосов
/ 20 ноября 2010

Так я решил проблему, передав явный параметр pids dir с помощью «--pid-dir».Не уверен, что это идеально, но это сработало.

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 голос
/ 27 октября 2015

У меня была такая же проблема. Оказалось, что существовал

application_name / Shared / ИДП / delayed_job.main.pid

Файл

, который имел неправильные разрешения владельца, что приводило к сбою развертывания. Исправление разрешений этого файла решило проблему для меня.

1 голос
/ 20 ноября 2010

Добавить создание этого каталога до

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
0 голосов
/ 16 января 2014

Поскольку создание каталогов дешево и быстро, используйте следующий обратный вызов:

before 'deploy', 'deploy:setup'

Это гарантирует, что структура будет всегда перед каждым развертыванием.

...