ArgumentError (فشل مقارنة الوقت مع السلسلة) في وحدة تحكم الأنماط

لدي إعداد مجلد فرعي/وكيل عكسي نموذجي إلى حد ما مع Apache كوكيل عكسي.

في البداية كانت هناك مشكلات في الأصول غير الآمنة، لذا قمت بتعيين force_https في ENV. الآن عند استرداد الأصول مثل stylesheets/color_definitions_light_7_1_6cfae4de9c47a1b8ed3d5748018236d10ea9107e.css?__ws=site.com

ربما أفعل شيئًا غبيًا، لكنني أحصل على هذا:

ArgumentError (comparison of Time with String failed)
app/controllers/stylesheets_controller.rb:66:in `\u003c='\napp/controllers/stylesheets_controller.rb:66:in `show_resource'\napp/controllers/stylesheets_controller.rb:19:in `show'\napp/controllers/application_controller.rb:414:in `block in with_resolved_locale'\napp/controllers/application_controller.rb:414:in `with_resolved_locale'\nlib/middleware/omniauth_bypass_middleware.rb:74:in `call'\nlib/middleware/content_security_policy.rb:12:in `call'\nlib/middleware/anonymous_cache.rb:369:in `call'\nconfig/initializers/100-quiet_logger.rb:20:in `call'\nconfig/initializers/100-silence_logger.rb:29:in `call'\nlib/middleware/enforce_hostname.rb:24:in `call'\nlib/middleware/request_tracker.rb:228:in `call'\n```
إعجاب واحد (1)

حسنًا، بالنظر إلى

يبدو أن stylesheet_time هو سلسلة نصية، لذا فإن تغيير هذا السطر إلى

    if cache_time && stylesheet_time && stylesheet_time.to_date <= cache_time

يحل المشكلة. لا أفهم كيف يحدث هذا الآن، حيث لا أرى أي عمليات تثبيت حديثة تؤثر على هذا.

إذًا، إليك كيفية تعيينه:

    stylesheet_time = query.pick(:created_at)

يبدو أن :created_at سيكون تاريخًا مناسبًا. هل يمكن أن تكون هناك جوهرة أساسية قد تغيرت؟ وكيف لم يتم اكتشاف ذلك في الاختبارات؟

إعجاب واحد (1)

إليك ما يبدو أنه يصلح الأمر:

    if !cache_time.to_date.nil? && !stylesheet_time.to_date.nil? 
      if (stylesheet_time.to_date <= cache_time.to_date)
        return render body: nil, status: 304
      end 
    end

يبدو أنه من الممكن أن يقوم to_date بتحويل شيء صحيح القيمة إلى تاريخ فارغ، على ما أعتقد.

لا. هذا لا يعمل أيضًا. انتهى بي الأمر بلف القسم في begin/rescue/end.

أنا مرتبك جدًا بشأن كيف يمكن أن يؤثر هذا على هذا المجلد الفرعي/الموقع الذي يتم عكسه للخادم فقط.

ربما يتعلق الأمر بـ

      cache_time = request.env["HTTP_IF_MODIFIED_SINCE"]

وربما لا يتم تمرير ذلك من Apache أو شيء من هذا القبيل - أو أن سلسلة تاريخ غير صالحة تمر.

كان هناك rescue nil على ذلك، ولكن هذا كان قبل 5 سنوات.

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

إعجاب واحد (1)

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

إعجابَين (2)

تباً. كنت آمل أن ينقذني هذا، ولكن لدي بالفعل DISCOURSE_FORCE_HTTPS: true في ملف yml.

الآن أنا أكثر ارتباكًا بشأن كيف أن هذا الموقع الوحيد هو الذي يواجه المشكلة.

لقد قمت بتغيير إعداد “فرض https” في واجهة المسؤول، ولكن من المحتمل أن يكون نفس الشيء

إعجاب واحد (1)

أهلاً!

لقد واجهت نفس المشكلة بالضبط مع NGINX بدلاً من Apache كوكيل عكسي.
هل وجدت حلاً؟

بالمناسبة، فشلت فقط مع إصدار سطح المكتب، ولم تكن هناك مشكلة على الإطلاق مع إصدار الهاتف المحمول.
لقد تجاوزت ذلك عن طريق تعطيل التخزين المؤقت على الوكيل العكسي.

إعجاب واحد (1)

@pfaffman لقد قمت ببساطة بالرجوع من الإصدار 3.1.0.beta3 إلى 3.1.0.beta2، وسار كل شيء بسلاسة ويعمل الآن بشكل مثالي كما ينبغي.

أنا لست خبيرًا بما يكفي في Discourse للتحقق مما حدث خطأ أو لتقديم تقرير خطأ، خاصةً في تثبيت غير مدعوم.

ولكن إذا كان بإمكاني المساعدة بأي شكل من الأشكال، فسأكون سعيدًا!