1

사용자가 노래를 게시 할 때마다 지연된 작업이 있습니다.이 작업은 사용자의 Facebook 벽에 활동 게시물을 보냅니다. 다음은 작업 코드와 컨트롤러에서 호출하는 코드입니다. Ryan Bates Facebook Open Graph Railscastdelayed_job_active_record (rake jobs : work)를 호출하는 방법 externally production env

user.rb

(upon successful save) 
     User.delay.post_song(current_user.id, post_url(@post)) 

이 작업은 표준 rake jobs:work로 개발 모드에서 실행

def self.post_song(user_id, song_url) 
    user = User.find(user_id) 
    user.facebook.put_connections("me", "virtual_piano:post", song: song_url) 
    end 

posts_controller.rb에서 볼 수 있듯이

나는 'delayed_job_active_record' 보석을 사용하고 있습니다.

지연된 작업이있는 RAILS_ENV=production script/delayed_job start을 사용하는 사람을 보았습니다. 어떻게이 방법을 프로덕션 환경에서 호출하고 백그라운드에서 계속 실행합니까?

많은 감사!

답변

7

rake jobs:work in delayed_job은 레일을위한 rails s 명령과 같습니다. 명령을 실행 한 콘솔 (쉘)의 주 프로세스에서 실행됩니다. 그것이 포함 된 콘솔 (셸)이 실행을 중지하면 (즉, 로그 아웃하면) 실행이 중지됨을 의미합니다.

RAILS_ENV=production script/delayed_job start 대신에 rails s -n과 같은 데몬 (백그라운드 프로세스)으로 delayed_job 대기열을 시작합니다.

2

스크립트가 수행합니다 백그라운드에서 delayed_job를 실행

require 'delayed/command' 
Delayed::Command.new(ARGV).daemonize 

.

당신이 전경에서 실행하려는 경우, 당신은하는 간단한 스크립트를 만들 수 있습니다

worker = Delayed::Worker.new({}) # or add options 
worker.start