سؤال

لقد استخدمت تأخير _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})'  & "

ولكن أود أن أعرف ما إذا كنت أفعل شيئًا خاطئًا في وظائف الخلفية ،

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

المحلول

حسنًا ، كان هذا خطأ مستخدم غبي. كما اتضح ، تلقيت مكالمة مرة أخرى كانت إعادة تشغيل العملية وإنشاء حلقة لا نهاية لها. بعد إصلاح المكالمة مرة أخرى ، يعمل تمامًا كما هو متوقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top