القضبان / delayed_job - يريدون تحميل أحدث نسخة من الطبقة العمل
-
05-07-2019 - |
سؤال
وأنا باستخدام البرنامج المساعد delayed_job في القضبان للقيام معالجة الخلفية، وأواجه زوبعة في "تطوير رشيقة" لقد تشهد حتى الآن في القضبان ...
وعادة في القضبان لو ضرب خطأ / ترغب في إضافة بعض الوظائف الجديدة - أنا فقط إضافة بعض رمز وتحديث الصفحة ويعمل القانون الجديد
ومع delayed_job، يبدو أن لا يتم إعادة تحميل الطبقة العمل ... إذا فشل المهمة وأذهب وإصلاح الخطأ والنار المهمة مرة أخرى، والقانون القديم يعمل مرة أخرى.
هل هناك أي طريقة لجعل delayed_job تحميل أحدث نسخة من الطبقة العمل قبل تتذرع بها؟
وفقط في حالة هذا له علاقة معها - وأنا أعلم delayed_job لديها عدد قليل من الخيارات المختلفة في سبل للاعلان عن الوظائف / وظائف تشغيل:
وصفي المهمة في الدليل ليب القضبان وأعلنت مثل:
class FooJob < Struct.new(:foo_id)
وأنا استدعاء وظيفة مثل هذا من وحدة تحكم:
Delayed::Job.enqueue(FooJob.new(params[:id]))
المحلول
وليس هناك شيء مدمج للقيام بذلك. عموما كنت مسؤولا عن إدارة وإعادة العاملين لديك. وربما هذا هو فقط كذلك منذ إعادة تحميل تنمية القضبان جيدة ولكن ليست مثالية، ومحاولة لصناعة السيارات في إعادة تحميل أن تأخر العمل يحتمل أن تصل الى كل القضايا خفية النوع الذي ستكون مبهمة جدا لتصحيح داخل العملية المنفذة. أيضا، إذا كان إعادة تحميل تلقائيا البيئة لكل وظيفة الكثير من حالات الاستخدام سيحصل بطيئة بشكل كبير في وضع ديف.
واقتراحي هو فقط للحصول على استخدام لفعل rake jobs:work
ثم Ctrl-C
عند إجراء تغييرات. بدلا من ذلك يمكنك إنشاء برنامج نصي فقط أن يدير يدويا الوظائف على أساس مخصص (مأخوذ من delayed_job مستندات أ >):
#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/environment'
Delayed::Worker.new.start
نصائح أخرى
وأنا استخدم هذا الإختراق أن طبقات للعمل لطيف جدا، ولكن كن على علم أنه من المحتمل جدا القضبان والإصدار delayed_job محدد لذلك ربما تحتاج إلى تغيير بعض الأشياء. اختبار مع القضبان 3.2.0 وdelayed_job 2.1.4.
ووضع ذلك في مثل script/delayed_job_development
وتشغيله من جذورها القضبان.
#!/usr/bin/env ruby
require File.expand_path('../config/environment', File.dirname(__FILE__))
require 'delayed/worker'
require "rails/console/app"
class DummyConsoleClass
include Rails::ConsoleMethods
end
dummy_console = DummyConsoleClass.new
worker = Delayed::Worker.new({:quiet => false})
puts "Waiting for jobs..."
loop do
if Delayed::Job.find_available(worker.name).count > 0
puts "Found jobs"
dummy_console.reload!
loop do
break if worker.work_off.sum == 0
end
puts "Done, waiting for jobs..."
end
sleep(2)
end
يرجى التعليق إذا كنت تعرف أن هذه فكرة سيئة جدا أو الأشياء أن تكون على علم، وأنا أساسا استخدامه عند تحرير واختبار الوظائف التي تديرها مباشرة وليس مع المهام المجدولة على المدى الطويل في المستقبل.