Отложенная работа не запускается с использованием 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)

Вот код капистрано (ПРИМЕЧАНИЕ: я пробовал обе команды запуска/перезапуска)

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)


person kapso    schedule 20.11.2010    source источник


Ответы (6)


Увидел ту же проблему.

Оказывается, мне не хватало каталога ~/apps/application_name/shared/pids.

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

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

person ranktrackerpro    schedule 13.12.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, и это вызывало ошибку «ложный каталог существует».

person PhilT    schedule 10.11.2011
comment
То же самое. Произошло при использовании малоизвестной настройки Capistrano shared_children. Решено символической ссылкой в ​​общем: ln -s tmp/pids. - person Zubin; 03.01.2013
comment
Очень полезный ответ решил мою проблему. Большое спасибо! - person wallerjake; 12.05.2014
comment
@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-командах :( спасибо! - person levitas111; 25.06.2014
comment
хорошо, единственное, что мне нужно сделать, это создать каталог pids в /var/www/apps/production.myserver.de/shared :) - person levitas111; 25.06.2014

Вот как я исправил проблему, я передал явный параметр 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
person kapso    schedule 20.11.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
person shingara    schedule 20.11.2010

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

имя_приложения/общий/pids/delayed_job.main.pid

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

person ino1tn0t    schedule 27.10.2015

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

before 'deploy', 'deploy:setup'

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

person spyle    schedule 15.01.2014