2009-10-22 5 views
1

Rails에서 delayed_job 플러그인을 사용하여 백그라운드 처리를 수행하고 있으며, 지금까지 겪어 본 '민첩한 개발'에서 발생하는 딸꾹질을 경험하고 있습니다. Rails ...Rails/delayed_job - 최신 버전의 작업 클래스를로드하려고합니다.

보통 오류가 발생하거나 새로운 기능을 추가하려고합니다. 코드를 새로 추가하고 새 코드가 실행됩니다.

delayed_job을 사용하면 작업 클래스가 다시로드되지 않는 것 같습니다 ... 작업이 실패하고 오류를 수정하고 작업을 다시 실행하면 이전 코드가 다시 실행됩니다.

delay_job을 호출하기 전에 작업 클래스의 최신 버전을로드하는 방법이 있습니까?

그냥 사건이 그것과 아무 상관이있다 - 나는 delayed_job 일자리/실행 작업을 선언 할 수있는 방법 몇 가지 다른 옵션이 있습니다 알고

내 작업 클래스는 레일의 lib 디렉토리에 있으며 선언 같은 :

class FooJob < Struct.new(:foo_id) 

내가 컨트롤러에서 다음과 같이 작업을 호출하고 있습니다 :

이 작업을 수행하는 내장 아무것도 없다
Delayed::Job.enqueue(FooJob.new(params[:id])) 

답변

1

. 일반적으로 근로자를 관리하고 다시 적재해야합니다. Rails 개발 로딩이 좋지만 완벽한 것은 아니며, 지연된 작업을 자동으로 다시로드하려고 시도하면 잠재적으로 작업자 프로세스 내부에서 디버깅하기에 불투명 한 모든 미묘한 문제가 발생할 수 있습니다. 또한 모든 작업에 대해 환경을 자동으로 다시로드하면 많은 유스 케이스가 dev 모드에서 매우 느려집니다.

변경 사항을 적용 할 때 rake jobs:workCtrl-C을 사용하는 것이 좋습니다. 아마 아주 레일 있다고 나는 아주 좋은 작동하지만 알고 있어야 솔기이 해킹을 사용

#!/usr/bin/env ruby 
require File.dirname(__FILE__) + '/../config/environment' 

Delayed::Worker.new.start 
+1

또 다른 멋진 솔루션을 찾을 수 있습니다 [여기] (http://stackoverflow.com/a/4905363/250703) – Christian

0

: 또는 당신은 (delayed_job docs에서 촬영) 단지 수동으로 임시 기준으로 작업을 실행하는 스크립트를 만들 수 있습니다 및 delayed_job 버전의 특정 그래서 당신은 아마 몇 가지를 변경해야합니다. Rails 3.2.0 및 delayed_job 2.1.4로 테스트되었습니다.

예 : script/delayed_job_development 그리고 Rails 루트에서 실행하십시오. 당신이 아주 나쁜 아이디어 나주의해야 할 일이라고 알고있는 경우

#!/usr/bin/env ruby 

require File.expand_path('../config/environment', File.dirname(__FILE__)) 
require 'delayed/worker' 
require "rails/console/app" 

class DummyConsoleClass 
    include Rails::ConsoleMethods 
end 
dummy_console = DummyConsoleClass.new 

worker = Delayed::Worker.new({:quiet => false}) 

puts "Waiting for jobs..." 
loop do 
    if Delayed::Job.find_available(worker.name).count > 0 
    puts "Found jobs" 
    dummy_console.reload! 
    loop do 
     break if worker.work_off.sum == 0 
    end 
    puts "Done, waiting for jobs..." 
    end 
    sleep(2) 
end 

는 편집하고 미래로 긴 실행하도록 예약 된 작업 즉시하지 실행 작업을 테스트 할 때 내가 주로 사용, 의견을주십시오.

관련 문제