2012-10-15 3 views
0

난 레일 응용 프로그램에서 delayed_job을 사용하는 데 문제가 있습니다. 구조체를 통해 간단한 (정수) ID를 전달하려고하면 내 작업이 실패합니다. 작업이 지금과 같은 모습입니다.간단한 구조 때문에 Delayed_Job 작업이 실패 함

class EventJob < Struct.new(:event_id) 
    def perform 
     # TODO 
    end 
    end 

공연 본문은 현재 비어 있습니다. 나는 Struct.new 제거하면

Job failed to load: undefined method `members' for #. Handler: "--- !ruby/struct:EventJob \nevent_id: 1\n" 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/backend/base.rb:86:in `rescue in payload_object' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/backend/base.rb:84:in `payload_object' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/backend/base.rb:94:in `block in invoke_job' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `block in initialize' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `execute' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/backend/base.rb:91:in `invoke_job' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:182:in `block (2 levels) in run' 
C:/Ruby193/lib/ruby/1.9.1/timeout.rb:68:in `timeout' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:182:in `block in run' 
C:/Ruby193/lib/ruby/1.9.1/benchmark.rb:295:in `realtime' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:181:in `run' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:238:in `block in reserve_and_run_one_job' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `block in initialize' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `execute' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:238:in `reserve_and_run_one_job' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:166:in `block in work_off' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:165:in `times' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:165:in `work_off' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:133:in `block (4 levels) in start' 
C:/Ruby193/lib/ruby/1.9.1/benchmark.rb:295:in `realtime' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:132:in `block (3 levels) in start' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `block in initialize' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `execute' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:129:in `block (2 levels) in start' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:128:in `loop' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:128:in `block in start' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/plugins/clear_locks.rb:7:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/plugins/clear_locks.rb:7:in `block (2 levels) in ' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:78:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:78:in `block (2 levels) in add' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:60:in `block in initialize' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:78:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:78:in `block in add' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `call' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:65:in `execute' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/lifecycle.rb:38:in `run_callbacks' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/worker.rb:127:in `start' 
C:/Ruby193/lib/ruby/gems/1.9.1/gems/delayed_job-3.0.3/lib/delayed/tasks.rb:9:in `block (2 levels) in ' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:205:in `call' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:200:in `each' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:200:in `execute' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain' 
C:/Ruby193/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain' 
C:/Ruby193/lib/ruby/1.9.1/rake/task.rb:144:in `invoke' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `each' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:88:in `top_level' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:66:in `block in run' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling' 
C:/Ruby193/lib/ruby/1.9.1/rake/application.rb:63:in `run' 
C:/Ruby193/bin/rake:32:in `' 

(: EVENT_ID)를가를 실행하고 여기에

Delayed::Job.enqueue(EventJob.new(1)) 

errorr 메시지가있어이 같은 작업을 수행 할 때 나는 다음과 같은 실패 오류를 받고 있어요 peform 방법. 이상한 것은 "멤버"라는 메서드가 없다는 것입니다. 그러나 Struct에는 멤버라는 메서드가 있습니다. delayed_job과 Struct 사이에 호환성 문제가 있습니까?

감사합니다.

답변

0

YAML 엔진에는 이상한 점이 있습니다. YAML :: Parser 상수가 무엇인지 확인하십시오. Psych :: Parser 여야합니다. irb 콘솔에서

YAML.load "--- !ruby/struct:EventJob \nevent_id: 1\n" 

을 수행 할 수 있어야합니다.

+0

고마워요. 파서 상수를이 방법으로 살펴 보았습니다 : YAML :: ENGINE.yamler 그리고 "syck"를 반환했습니다. YAML.load를 실행하면 다음과 같이됩니다. #

+0

yamler를 이니셜 라이저 파일의 "Psych"과 같이 설정하면 에 'yaml'이 필요합니다. YAML :: ENGINE.yamler = 'psych ' 여전히 동일한 오류가 발생했습니다 –

+0

하루가 끝날 때 위의 YAML.load 행은 event_id == 1로 EventJob 인스턴스를 생성해야합니다. 불행히도 YAML이 왜 잘못되었는지 전혀 알 수 없습니다. – Roman

0

이 문제의 원인은 무엇인지 알 수 없습니다. 방금 프로젝트의 이전 백업 버전으로 돌아 왔고 지금은 다시 작동하는 것 같습니다. 죄송합니다. 더 자세한 정보를 제공 할 수는 없지만 그 외의 다른 곳에서는 정보가 누락되었습니다.

관련 문제