Pergunta

Estou usando touched_job com o Capistrano e gostaria de iniciar o atraso_job na inicialização do aplicativo da web usando o 'script/touched_job start'. Dessa forma, o Capistrano pode reiniciá -lo na implantação. Se o servidor for reiniciado, meus touched_jobs devem iniciar o projeto.

Como posso fazer isso? Devo estar procurando fazer isso nos arquivos do ambiente ou como um inicializador?

Foi útil?

Solução

Você deve criar uma receita com o comando de reinicialização.

namespace :delayed_job do 
    desc "Restart the delayed_job process"
    task :restart, :roles => :app do
        run "cd #{current_path}; RAILS_ENV=#{rails_env} script/delayed_job restart"
    end
end

Em seguida, você o adiciona para ser executado no final da sua implantação.

after "deploy:update_code", "delayed_job:restart"

Outras dicas

Em combinação com a receita de reinicialização do Capistrano, é bastante conveniente usar o Cron para também iniciar o daemon touched_job na startup usando o especial @reboot tempo em um crontab:

@reboot /bin/bash -l -c 'cd /path/to/app && RAILS_ENV=production script/delayed_job restart'

E é ainda mais conveniente junto com em qualquer momento Para configurar uma tarefa agendada:

job_type :envcommand, 'cd :path && RAILS_ENV=:environment :task'

every :reboot do
  envcommand 'script/delayed_job restart'
end

Não tenho certeza se toda a implementação do Cron realmente só é executada @reboot Na inicialização do sistema, mas pelo menos o Ubuntu costuras para executá -las apenas no início e não sempre que o daemon Cron inicia ou reinicie. Se você passar restart para script/delayed_job Provavelmente funcionará em ambos os casos.

Um pouco atrasado para esta pergunta, mas a versão 2.1.4 de touched_job possui receitas capistano:

https://github.com/collectiveidea/delayed_job/wiki/rails-3-and-capistrano

É a resposta de Damien Mathieu, mas já parte da jóia tardia_job.

Isso agora funciona com os Rails 2 e 3:

Em Implement.rb, adicione as seguintes linhas:

require "delayed/recipes"
set :rails_env, 'production' #added for delayed_job
before "deploy:restart", "delayed_job:stop"
after  "deploy:restart", "delayed_job:start"
after "deploy:stop",  "delayed_job:stop"
after "deploy:start", "delayed_job:start"

É possível inicializar e monitorar touched_job com Monit:
Como monitorar touched_job com monit

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top