ArgumentError (comparaison de Time avec String a échoué) dans le contrôleur de feuilles de feuilles de style

J’ai une configuration de sous-dossier/proxy inverse assez typique avec Apache comme proxy inverse.

Au début, il y avait des problèmes avec les ressources non sécurisées, j’ai donc forcé force_https dans ENV. Maintenant, lors de la récupération de ressources comme stylesheets/color_definitions_light_7_1_6cfae4de9c47a1b8ed3d5748018236d10ea9107e.css?__ws=site.com

Peut-être que je fais quelque chose de stupide, mais j’obtiens ceci :

ArgumentError (la comparaison de Time avec String a échoué)
app/controllers/stylesheets_controller.rb:66:in `\u003c='
app/controllers/stylesheets_controller.rb:66:in `show_resource'
app/controllers/stylesheets_controller.rb:19:in `show'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'
1 « J'aime »

Eh bien, en regardant \n\ndiscourse/app/controllers/stylesheets_controller.rb at main · discourse/discourse · GitHub semble que stylesheet_time soit une chaîne de caractères, donc changer cette ligne en \n\n\n if cache_time && stylesheet_time && stylesheet_time.to_date <= cache_time\n\n\nrésout le problème. Je ne comprends pas comment cela se produit maintenant, car je ne vois aucun commit récent affectant cela.\n\nVoici donc comment c’est défini :\n\n stylesheet_time = query.pick(:created_at)\n\nIl semblerait que :created_at soit une date valide. Une gem sous-jacente aurait-elle pu changer ? Et comment cela n’aurait-il pas été détecté lors des tests ?

1 « J'aime »

Voici ce qui semble le résoudre :

    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

Il semble que to_date puisse transformer quelque chose de vrai en une date nulle, je suppose.

Non. Ça ne marche pas non plus. J’ai fini par encapsuler la section dans un begin/rescue/end.

Je suis très perplexe quant à la façon dont cela pourrait n’affecter que ce sous-dossier/site en reverse-proxy.

Peut-être que cela a à voir avec

      cache_time = request.env["HTTP_IF_MODIFIED_SINCE"]

et peut-être que cela n’est pas transmis par Apache ou autre chose - ou qu’une chaîne de date invalide arrive.

Il y avait auparavant un rescue nil sur cela, mais c’était il y a 5 ans.

Et je pense qu’il est difficile de déboguer car c’est un cache, donc pour déboguer, je devrais vider ce cache pour tester si cela fonctionne.

1 « J'aime »

J’ai eu le même problème (également lors de l’utilisation de la configuration de sous-dossier). Après avoir corrigé un avertissement de contenu mixte sans rapport en définissant le paramètre force_https sur true, le problème a disparu…

2 « J'aime »

Zut. J’espérais que cela allait me sauver, mais j’ai déjà DISCOURSE_FORCE_HTTPS: true dans le yml.

Maintenant, je suis encore plus confus de voir que seul ce site pose problème.

J’ai changé le paramètre « forcer https » dans l’interface d’administration, mais c’est probablement la même chose

1 « J'aime »

Salut !

J’ai exactement le même problème avec NGINX à la place d’Apache comme proxy inverse.
Avez-vous trouvé une solution ?

Au fait, cela n’a échoué qu’avec la version de bureau, aucun problème avec la version mobile.
Je l’ai contourné en désactivant la mise en mémoire tampon sur le proxy inverse.

1 « J'aime »

@pfaffman J’ai simplement rétrogradé d’une version 3.1.0.beta3 à 3.1.0.beta2, tout s’est déroulé sans problème et fonctionne maintenant parfaitement comme il se doit.

Je ne suis pas assez expérimenté avec Discourse pour vérifier ce qui s’est mal passé ou signaler un bug, surtout sur une installation non prise en charge.

Mais si je peux être d’une quelconque aide, je serai ravi !