2016-08-01 1 views
1

백그라운드 프로세스를 실행하는 레일 애플리케이션을 만들었습니다. 서버에 주기적으로 ping을 수행하고 응답 시간에 대한 그래프를 표시합니다. 이것을 위해 나는 crono라고 불리는 보석을 사용하고 있습니다. 나는 'bundle exec crono'를 사용하여 명령 행에서 작업을 시작했다.Ruby on rails : 서버가 시작될 때 백그라운드 작업을 자동으로 실행하는 방법?

레일스 서버가 명령 줄에서 시작하지 않고 시작될 때 어떻게 백그라운드 프로세스를 자동으로 실행할 수 있습니까?

또한 주기적으로 페이지를 자동으로 새로 고쳐 업데이트 된 그래프를 표시하는 방법이 있습니까?

편집 :이 응용 프로그램은 프로덕션 환경에 배포됩니다.
편집 : 여전히 작동하지 않습니다.


응용 프로그램/설정/
ping_job.rb
cronotab.rb

cronotab 사용 'crono'보석 ping_job.rb 매 5 내부 작업을 실행할 다음은 폴더 구조입니다 초.

는    
데프

      # 작업 정의가 간다 peform받는 'typhoeus'
클래스 PingJob을 필요로한다.

    끝

I는 서버가 시작할 때 자동으로 ping_job.rb에 정의 된 작업을 실행합니다. 언제든지 보석을 사용할 생각입니다. 모든 제안을 환영합니다.

+0

시스템을 시작할 때 시작하려면 시스템의 표준 도구를 사용하십시오. 예를 들어, 우분투에서 그것은 신출내장하는 데 사용됩니다. 이제 그것은 체계적이라고 생각합니다. 다른 시스템에는 다른 도구가있을 수 있습니다. 가지고있는 도구에 대한 설명서를 참조하십시오. –

답변

2

은 레일 서버를 시작하는 실행되어 바로 Rails.application.initialize!이 아래 설정/environment.rb에에 넣어, 그래서 응용 프로그램이

1

를 초기화 한 후 몇 시간 전 실행 될 나는 배경의 시작을 가입하고 싶어 당신뿐만 아니라 레일 서버의 시작과 함께 프로세스. 그리고 결국 그것은 나쁜 생각이라는 것을 알게되었습니다. 최선의 해결책은 각 배포에서 프로세스를 시작하고 다시 시작하는 배포 작업을 만드는 것입니다. 예를 들어 capistrano는 다음과 같이 할 수 있습니다 :

namespace :deploy do 
    task :start do 
    invoke 'my_process:start' 
    end 

    task :stop do 
    invoke 'my_process:stop' 
    end 

    task :restart do 
    invoke 'my_process:start' 
    invoke 'my_process:stop' 
    end 
end 

namespace :my_process 
    task :start do 
    execute "some system command to start the process" 
    end 

    task :stop do 
    execute "some system command to stop the process" 
    end 
end 

Rails 초기화 파일에서 프로세스를 시작하지 마십시오. 서버에 응용 프로그램 작업자가 거의 없을 때 프로세스가 여러 번 시작될 수 있습니다. 또는 Rails 콘솔을 시작할 때 프로세스를 시작할 수도 있습니다.

관련 문제