التخزين المؤقت الإجراء لا ينتهي بشكل صحيح، حتى عندما أستطيع أن أرى أنه يتم استدعاؤه

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

سؤال

لقد حصلت على كاسحة من المفترض أن تنتهي صلاحيت بعض مخابئ العمل. على الرغم من أن مصحح الأخطاء يتوقف مباشرة قبل الدعوة إلى 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')

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