2010-11-20 10 views
9

Ich kann den verzögerten Job-Prozess nicht mit einem Capistrano-Rezept starten. Hier ist der Fehler, den ich bekomme.Verzögerter Job wird nicht mit Capistrano gestartet

/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) 

Hier ist der Capistrano Code (HINWEIS-: Ich habe versucht, sowohl Start/Befehle neu starten)

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 

Weitere Einzelheiten Fehler von der Bereitstellung logs -

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 

Dies ist eine Rails 3 app (v3.0.3)

Antwort

3

Dies ist, wie ich das Problem behoben, legte ich eine explizite pids dir Parameter „--pid-dir“ verwenden. Nicht sicher, ob das perfekt ist, aber es hat funktioniert.

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

Fügen Sie die crea hinzu tion dieses Verzeichnisses vor

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

Ich habe auch diesen Fehler und ein paar Fragen gefunden:

  • Vergewissern Sie sich einen shared/pids Ordner.
  • dass Sie den richtigen Haken Setup

Ihre deploy.rb Skript enthalten soll:

require "delayed/recipes" 

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

ich die Haken aus einem alten Post kopiert hatte und sie erscheinen nun als falsch. Diese stammen aus den Kommentaren der tatsächlichen delayed_job-Rezeptdatei.

Ich glaube, cap deploy:setup sollte die pids Ordner erstellen, aber ich habe Dinge anders eingerichtet und es wurde nicht erstellt. app/current/tmp/pids Links zu app/shared/pids und dies verursachte den falschen Verzeichnis existiert Fehler.

+1

Das gleiche hier. Passiert, wenn Sie die wenig bekannte "shared_children" -Einstellung von capistrano verwenden. Gelöst durch Symlinking in shared: 'ln -s tmp/pids'. – Zubin

+0

Sehr hilfreiche Antwort löste mein Problem. Vielen Dank! – wallerjake

+0

@Zubin, @wallerjake und @PhilT: ich denke, ich habe das gleiche symlinking-problem: 'current/tmp/pids ->/var/www/apps/production.myserver.de/shared/pids' ich auch muss zum '/var/www/apps/production.myserver.de/shared'-directory gehen und den 'ln -s tmp/pids'-Befehl eingeben? Ich bin nicht wirklich fest in Unix-Befehle :( es Ihnen danken! – levitas111

20

Das gleiche Problem sehen.

Es stellt sich heraus, ich fehlte die ~/apps/application_name/shared/pids Verzeichnis.

Schließlich zu schaffen, machte dieses Problem weg.

Keine Notwendigkeit, benutzerdefinierte dj_pids Verzeichnis einzurichten.

0

Da die Erstellung der Verzeichnisse ist billig und schnell, verwenden Sie den folgenden Rückruf:

before 'deploy', 'deploy:setup' 

Dadurch wird sichergestellt, dass Struktur vor jeder deploy ist immer da.

1

Ich hatte das gleiche Problem. Es stellte sich heraus, dass es einen bestehenden

application_name/shared/pids/verzögerten_job.main gab.pid

Datei, die falsche Besitzer Berechtigungen hatte, die die Bereitstellung fehlgeschlagen verursacht hat. Das Korrigieren der Berechtigungen dieser Datei löste das Problem für mich.