Backgroundjobs توقف الوظيفة بعد الانتهاء
-
26-09-2019 - |
سؤال
لقد استخدمت تأخير _job في الماضي. لدي مشروع قديم يعمل على خادم حيث لا يمكنني الترقية من Ruby 1.8.6 إلى 1.8.7 ، وبالتالي لا يمكنني استخدام الوظيفة المتأخرة ، لذلك أحاول BackgroundJobs http://codeforpeople.rubyforge.org/svn/bj/trunk/readme
لقد عملت حتى تعمل وظيفتي ، لكن هناك شيء لا يبدو صحيحًا. على سبيل المثال ، إذا قمت بتشغيل الوظيفة مثل هذا:
jobs = Bj.submit "echo hi", :is_restartable => false, :limit => 1, :forever => false
ثم أرى المهمة في جدول BJ_JOB وأرى أنها مكتملة مع "مرحبًا" في stdout. أرى أيضًا وظيفة واحدة فقط في الطاولة ولا تستمر في إعادة تشغيلها.
لسبب ما إذا قمت بذلك:
jobs = Bj.submit "./script/runner ./jobs/calculate_mean_values.rb #{self.id}", :is_restartable => false, :limit => 1, :forever => false
ومع ذلك ، لا تزال المهمة تكمل كما هو متوقع ، فهي تستمر في إدخال صفوف جديدة في جدول BJ_JOB ، ويتم تشغيل الطريقة مرارًا وتكرارًا حتى أوقف خادم DEV الخاص بي. هل هكذا من المفترض أن تعمل؟
أنا أستخدم Ruby 1.8.6 و Rails 2.1.2 وليس لدي خيار الترقية. أنا أستخدم نكهة البرنامج المساعد من BJ.
لأنني فقط بحاجة إلى تشغيل العملية مرة واحدة بعد حفظ النموذج ، فإنني أعمل باستخدام البرنامج النصي/العداء مباشرة مثل هذا:
system " RAILS_ENV=#{RAILS_ENV} ruby #{RAILS_ROOT}/script/runner 'CompositeGrid.calculate_values(#{self.id})' & "
ولكن أود أن أعرف ما إذا كنت أفعل شيئًا خاطئًا في وظائف الخلفية ،
المحلول
حسنًا ، كان هذا خطأ مستخدم غبي. كما اتضح ، تلقيت مكالمة مرة أخرى كانت إعادة تشغيل العملية وإنشاء حلقة لا نهاية لها. بعد إصلاح المكالمة مرة أخرى ، يعمل تمامًا كما هو متوقع.