سؤال

أحصل على الخطأ التالي عند تشغيل مهمتي عبر DifiedJob:

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'
...

من الخطأ الذي كان واضحا أن Delayped_job تعذر العثور على ferret_server. ومع ذلك، عندما أقوم بتشغيل هذه المهمة نفسها من وحدة التحكم في وضع الإنتاج، فإنه يعمل بشكل جيد. أي أفكار كيف يمكنني التأكد من أن Delayed_job لديه:

  1. حقا تحميل بيئة الإنتاج. قمت بتعيين القضبان ['ENV]] = "الإنتاج" في البرنامج النصي / Delayed_job للتأكد من ذلك. (أعتقد أن هذا يجب أن يكون جيدا)

  2. حصلت النمس تكوينها عبر النماذج؟

هل كانت مفيدة؟

المحلول

هذا ما حدث لي أيضا. تحتاج إلى تعطيل النمس من الفهرسة أثناء تشغيل المهمة المتأخرة.

في تعريف العمال الخاص بك (شيء مثل Rails_root / Lib / Worker.rb)، وبالنظر إلى نموذج يسمى المشاركة، يجب عليك تضمين خط مثل هذا:

class Worker < Struct.new(:stuff)
  def perform
    Post.disable_ferret
    <do some stuff>
    .
    .
    .
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top