مراقبة جدول قاعدة البيانات للتغييرات الخارجية من داخل تطبيق Rails

StackOverflow https://stackoverflow.com/questions/2560233

سؤال

أقوم بدمج بعض طاولات النموذج غير القوي في تطبيق Rails الخاص بي. كل شيء يعمل بشكل جيد للغاية ، والطريقة التي قمت بإعدادها للنموذج هي:

class Change < ActiveRecord::Base
  establish_connection(ActiveRecord::Base.configurations["otherdb_#{RAILS_ENV}"])
  set_table_name  "change"
end

بهذه الطريقة يمكنني استخدام Change نموذج لجميع السجلات الحالية مع find إلخ.

الآن أرغب في تشغيل نوع من الإخطار ، عند إضافة سجل إلى الجدول. نظرًا لأن النموذج لا يتم إنشاؤه عبر Change.new و Change.save استخدام ActiveRecord::Observer ليس خيارًا.

هل هناك أي طريقة يمكنني من خلالها تنفيذ بعض رمز القضبان ، كلما تمت إضافة سجل جديد؟ نظرت إلى delayed_job لكن لا يمكنني الحصول على رأسي ، وكيفية إعداد ذلك. أتصور أنه يتطور حول Job cron-job ، الذي يختار جميع الصفوف التي تم إنشاؤها منذ أن قامت الوظيفة الأخيرة بتشغيلها ثم استدعاء رمز القضبان المعني لكل صف.

تحديث النظر حاليا في جافان كلما, ، يبدو أنه يمكن أن يحل "رمز Run Rails من Part".

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

المحلول 2

هذا ما فعلته أخيرًا: استخدم كلما, ، لأنه يتكامل بشكل جيد مع Capistrano وأظهر لي كيفية تشغيل رمز القضبان من داخل CRON. كان سلامي المفقود في الأساس

script/runner -e production 'ChangeObserver.recentchanges'

الذي يتم تشغيله الآن كل 5 دقائق. ال recentchanges يقرأ آخر معرف نظرته من ملف TMP ، ويسحب كل شيء جديد Change السجلات التي لها معرف أعلى من ذلك وتدير رمز المراقب العادي لكل سجل (ويوفر أعلى مستوى نظر إلى ملف TMP ، بالطبع).

نصائح أخرى

نعم ، ستحتاج إما إلى نوع من معالج مهمة الخلفية (تأخير :: Job هي واحدة من المعالج الشهير ، أو يمكنك مزيفة مع مكتبة Daemon أو ما شابه) أو لإعداد cronjob الذي يعمل على نوع من الجدول الزمني . إذا كنت ترغب في التحقق بشكل متكرر (كل دقيقة ، على سبيل المثال) ، أوصي بتأخير :: طريق الوظيفة ، إذا كان أطول (كل ساعة أو نحو ذلك) ، فإن وظيفة cron ستفعل ذلك على ما يرام.

بالانتقال إلى مسار DJ ، ستحتاج إلى إنشاء وظيفة من شأنها التحقق من سجلات جديدة ، ومعالجةها إذا كان هناك أي ، ثم طلب الوظيفة ، حيث يتم وضع علامة "على كل وظيفة" عند الانتهاء.

-جون

كالعادة مع تغييرات حالة المراقبة ، هناك نهجان: الاقتراع والإخطار. يبدو أنك اخترت الذهاب إلى طريقة الاقتراع في الوقت الحالي (إلقاء نظرة على وظيفة cron على حالة قاعدة البيانات بشكل منتظم وتنفيذ بعض التعليمات البرمجية إذا تغيرت) يمكنك فعل الشيء نفسه باستخدام أحد جدولة القضبان ، هناك ، هناك ، هناك هل هناك عدد قليل (ستجدها Google بسهولة ، لديهم مجموعات ميزات مختلفة ، سأسمح لك باختيار واحد يناسب احتياجاتك إذا حصلت على هذا النحو)

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

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