التخزين المؤقت الإجراء لا ينتهي بشكل صحيح، حتى عندما أستطيع أن أرى أنه يتم استدعاؤه
-
20-09-2019 - |
سؤال
لقد حصلت على كاسحة من المفترض أن تنتهي صلاحيت بعض مخابئ العمل. على الرغم من أن مصحح الأخطاء يتوقف مباشرة قبل الدعوة إلى expire_action، فهذا لا ينتهي الأمر فعليا. أي فكرة عما يمكن أن يحدث؟
فيما يلي Sweeper والتحكم ذات الصلة.
# company_sweeper.rb (في دليل النماذج)
class CompanySweeper < ActionController::Caching::Sweeper
observe Company
def after_save(company)
expire_cache(company) if company.final_save && company.valid?
end
def expire_cache(company)
debugger <= #debugger stops here!
right before the call
I'm trying to make.
expire_action :controller => 'reports',
:action => 'full_report'
end
end
# report_controller.rb.
class ReportsController < ApplicationController
layout false
caches_action :full_report, :supplier_list, :service_categories
cache_sweeper :company_sweeper
def full_report
#do stuff...
end
end
الطريقة التي أعرف أنها لا تنتهي صلاحيتها هي أن التقرير الكامل يعيد البيانات القديمة، ويستجيب بشكل فوري تقريبا. الحق غريب؟
المحلول
هل لديك cache_sweeper
إعلان في شركارككون، أيضا؟ يجب تضمين Sweeper في وحدة التحكم التي تنفذ إجراءات دورة حياة على النموذج المعني. ما لم تفعل أشياء مع مثيلات الشركة في ReportConstroller، cache_sweeper
الخط لا ينتمي إلى هناك.
تتضمن التخزين المؤقت الإجراءات اسم مضيف ضمني. إذا كانت الزيارات اثنين تأتي في أسماء مضيفين مختلفة، فسيتم تخزين التخزين المؤقت تحت واحد والانتعاش تحت واحد مختلف.
نصائح أخرى
لا أعتقد أن هناك تفاصيل كافية هنا للإجابة حقا على سؤالك، ولكن فيما يلي بعض الأسئلة:
يجب أن يطلق الماكرون النار بشكل مستقل عن الإجراء Full_Report، لذلك إذا قمت بإجراء تغيير في شركة، فيجب أن ترى حريق المصحح (الذي يبدو أنه يحدث بشكل صحيح). لا تحتاج بعد ذلك تشغيل إجراء Full_Report، لذلك في هذه المرحلة، يمكنك التحقق من الملف المخزن مؤقتا تمت إزالة الملف المخزن مؤقتا. قد يكون من المفيد للتنقل من خلال المنتهية الصخرية في مصحح الأخطاء لمعرفة ما إذا كانت القضبان تخطي انتهاء الصلاحية لسبب آخر.
تحرير: أوه تعرف ماذا، كنت فقط Decgging في هذا، ويبدو أنه من المتوقع أن يتم expire_action في سياق وحدة تحكم (كنت أقرأ مصدر GEM في ActionPack). يفترض "الذات" هو وحدة تحكم، لذلك يتم تجاهل مراقبك في الخيار: تحكم.
أمثلة أخرى تعطي سلسلة محددة بدلا من الخيارات (على سبيل المثال expire_action '/reports/full_report'
) أنا لا أحب ذلك شخصيا --- لا يستخدم جهاز التوجيه - - لكن يبدو أنه سيعمل.
ربما يجب عليك التبديل إلى هذه الطريقة، تأكد من أن يعمل، ثم في مصحح الأخطاء، معرفة ما إذا كان لديك حق الوصول إلى URL_FOR. قد يكون بسيطة مثل expire_action url_for(:controller => 'reports', :action => 'full_report')