문제

DelayedJob을 통해 작업을 실행하면 다음과 같은 오류가 발생합니다.

closed stream
/usr/lib/ruby/1.8/drb/drb.rb:961:in `select'
/usr/lib/ruby/1.8/drb/drb.rb:961:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1211:in `alive?'
/usr/lib/ruby/1.8/drb/drb.rb:1168:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `each'
/usr/lib/ruby/1.8/drb/drb.rb:1166:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `synchronize'
/usr/lib/ruby/1.8/drb/drb.rb:1163:in `open'
/usr/lib/ruby/1.8/drb/drb.rb:1092:in `method_missing'
/usr/lib/ruby/1.8/drb/drb.rb:1110:in `with_friend'
/usr/lib/ruby/1.8/drb/drb.rb:1091:in `method_missing'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/remote_index.rb:31:in `<<'
/usr/lib/ruby/gems/1.8/gems/acts_as_ferret-0.4.3/lib/instance_methods.rb:90:in `ferret_update'
...

오류에서 Delayed_Job이 FERRET_SERVER를 찾을 수 없다는 것이 분명합니다. 그러나 프로덕션 모드에서 콘솔에서 동일한 작업을 실행하면 제대로 작동합니다. Delayed_job이

  1. 생산 환경을 실제로로드했습니다. 나는 이것을 보장하기 위해 스크립트/Delayed_job에서 [ 'env]] ='production '을 설정했습니다. (나는 이것이 좋을 것 같아)

  2. 모델을 통해 흰 족제비가 구성 되었습니까?

도움이 되었습니까?

해결책

이것은 나에게도 일어났다. 지연된 작업을 실행하는 동안 인덱싱에서 페렛을 비활성화해야합니다.

작업자 정의 (RAILS_ROOT/LIB/WORKER.RB와 같은) 및 POST라는 모델이 주어지면 다음과 같은 줄을 포함해야합니다.

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top