2013-01-18 1 views
1

God이 두 프로세스를 순서대로 시작할 수 있습니까?God Gem을 사용하여 프로세스 시작 시퀀스 설정

나는 Redis를 사용하는 Sidekiq을 사용하고 있습니다. 나는 Sidekiq을 한 후, 레디 스를 시작 시작하고 싶은, 그리고 내가 실행 그러나 잘 독립적으로 작동 설정 두 개의 시계가 있습니다

$ god -c "./config.god" -D

하나님이 동시에를 시작하려고 것으로 보인다을 Redis 서버에 연결할 수 없기 때문에 Sidekiq에서 오류가 발생합니다.

하나님에 대한 나의 설정 파일은 다음과 같습니다 : 나는 또한, 시작 순서를 제어에 대한 궁금

# config.god 
PROJECT_ROOT = ENV['PROJECT_ROOT'] || "/Path/to/app" 

God.watch do |w| 
    w.name = "redis-server" 
    w.group = 'conversion-api' 
    w.interval = 30.seconds 
    w.start = "/usr/local/Cellar/redis/2.4.16/bin/redis-server" 
end 

God.watch do |w| 
    w.name = "sidekiq" 
    w.group = 'conversion-api' 
    w.interval = 20.seconds 
    w.dir = ENV['PROJECT_ROOT'] 
    w.start = "bundle exec sidekiq -v -C#{PROJECT_ROOT}/config.yml -r #{PROJECT_ROOT}/app.rb -c 10" 
    w.stop = "bundle exec sidekiqctl stop #{PROJECT_ROOT}/tmp/pids/sidekiq.pid 5" 
    w.keepalive 
    # Don't pass in a pid file location. Let God handle things. Leaving a pid file location in 
    # the sidekiq config.yml seems to be harmless though and it lets us force stop sidekiq independently 
    # of God. 
    # w.pid_file = File.join(PROJECT_ROOT, 'tmp/pids/sidekiq.pid') 
    w.log = "./log/god_sidekiq.log" 
    w.behavior(:clean_pid_file) 
end 

답변

0

. sidekiq watch 객체에서 watch 전환 메소드를 사용하고 redis 프로세스가 실행 중인지 확인하는 방법을 살펴 보았습니다. God.watches [ "redis"]. state == : possible을 통해 sidekiq을 시작합니다. 시간이 없어서 "sleep 5;"라는 해킹을했습니다. sidekiq 시작 전과 재실행 종료 전.

+0

이름을 딴 것처럼 믿을만한 것으로 판명되면서 하나님을 버림을 끝내었다. Upstart로 Foreman으로 전환되었습니다. – Undistraction

+0

나는이 질문에 조금 더 시간을 할애해야한다. 여기서 누군가 해결책을 찾고 있다면 [Coderwall] (https://coderwall.com/p/9evraa)에 대한 설명입니다. – robdbirch

+0

[Gist] (https://gist.github.com/robdbirch/5608547)를 선호하는 경우, – robdbirch