2010-11-20 12 views
9

No puedo iniciar el proceso de trabajo retrasado utilizando una receta capistrano. Aquí está el error que estoy recibiendo.Trabajo retrasado no comenzará a usar 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) 

Aquí está el código de Capistrano (NOTA-: He intentado tanto manual/automático comandos)

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 

Más errores de detalle de los registros de despliegue -

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 

Ésta es una Carriles 3 aplicación (v3.0.3)

Respuesta

3

Así es como solucioné el problema, pasé un parámetro dir de pids explícito usando "--did-dir". No estoy seguro si esto es perfecto, pero funcionó.

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

Añadir la crea de este directorio antes de

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

También me dio este error y encontré un par de cuestiones:

  • Asegúrese de que tiene una carpeta shared/pids.
  • Asegúrese de que tiene la configuración correcta ganchos

Su guión deploy.rb debe contener:

require "delayed/recipes" 

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

que había copiado los ganchos de un antiguo puesto y parecen ser incorrectos ahora. Estos son de los comentarios reales del archivo de receta de trabajo retrasado.

Creo que cap deploy:setup debería crear la carpeta pids pero configuré las cosas de otra manera y no se creó. app/current/tmp/pids enlaces a app/shared/pids y esto estaba causando el error de directorio existe falso.

+1

Lo mismo aquí. Sucedió cuando se usaba la poco conocida configuración 'shared_children' de capistrano. Resuelto mediante symlinking en shared: 'ln -s tmp/pids'. – Zubin

+0

Una respuesta muy útil resolvió mi problema. ¡Muchas gracias! – wallerjake

+0

@Zubin, @wallerjake y @PhilT: creo que tengo el mismo problema de enlace simbólico: 'current/tmp/pids ->/var/www/apps/production.myserver.de/shared/pids' yo también tiene que ir al '/var/www/apps/production.myserver.de/shared'-directory e ingresar el comando' ln -s tmp/pids'? No soy muy firme en comandos Unix :( ¡gracias! – levitas111

20

Viendo el mismo problema.

Resulta que me faltaba el directorio ~/apps/application_name/shared/pids.

Finalmente, la creación hizo que este problema desapareciera.

No es necesario configurar el directorio personalizado dj_pids.

0

Desde la creación de los directorios es barato y rápido, usa la siguiente devolución de llamada:

before 'deploy', 'deploy:setup' 

Esto asegurará que la estructura es siempre allí antes de cada despliegue.

1

Tuve el mismo problema. Resultó que existía un

application_name/shared/pids/delayyed_job.main.pid

, que tenía permisos de propietario incorrectos, lo que causaba que la implementación fallara. La reparación de los permisos de este archivo resolvió el problema para mí.

Cuestiones relacionadas