2012-05-27 3 views
1

Mongoid 및 delayed_job_mongoid 보석을 사용하고 있습니다. Rails (3.2.3)를 포함하여 모든 것이 최신 버전입니다.delayed_job_mongoid는 handle_asynchronously를 사용할 수 없지만 .delay.method를 사용할 수 있습니다.

어떤 메소드 선언 후에 handle_asynchronously를 넣으면이 메소드는 항상 비동기로 실행된다는 것을 알고 있습니다.

class Item 
    # mongoid include stuff 

    def shout 
    puts 'a simple hi' 
    end 
    handle_asynchronously :shout 
end 

item = Item.create 
item.shout # returns a delayed job object 

j = _ 
# wait a moment 
j.last_error 

{undefined method `shout_without_delay' for #<Item:0x007f8365e62978> 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/mongoid-2.4.9/lib/mongoid/attributes.rb:166:in `method_missing' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/performable_method.rb:26:in `perform' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/backend/base.rb:94:in `block in invoke_job' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/lifecycle.rb:60:in `call' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/lifecycle.rb:60:in `block in initialize' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/lifecycle.rb:65:in `call' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/lifecycle.rb:65:in `execute' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/backend/base.rb:91:in `invoke_job' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/worker.rb:178:in `block (2 levels) in run' 
/Users/nik/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/timeout.rb:68:in `timeout' 
/Users/nik/.rvm/gems/ruby-1.9.3-p194/gems/delayed_job-3.0.2/lib/delayed/worker.rb:178:in `block in run' 
/Users/nik/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/benchmark.rb:295:in `realtime' 

을하지만 나는 그것이 작동

handle_asynchronously 라인없이

item.delay.shout 

라고했다면 :하지만이 같은 정의되지 않은 메서드 오류가 발생합니다!

아이디어가 있으십니까? 감사합니다.

답변

2

에서 더 자세한 정보를 얻을 수 있어야한다. 나는 무슨 일이 일어 났는지 알았다. 짧은 답변 : 당신은 방법을 찾을 수 있도록 mongoid 지연 작업에 대한 터미널

[control + c] 
rake jobs:work 

에서 노동자를 다시 시작해야합니다. 나는 이유를 모른다. handle_asynchronously의 또 다른 라인을 추가 할 때마다 작업자를 다시 시작하는 것을 기억하십시오 : 방법

해피 코딩!

1

당신의 구문은

class Item 
    # mongoid include stuff 

    def shout 
     puts 'a simple hi' 
    end 
    handle_asynchronously :shout 
end 

당신은이 게시물의 저자는 여기 https://github.com/collectiveidea/delayed_job

+0

OOPS. 미안, 내가 그랬어. –

관련 문제