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

**URL:** <https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380>\
**Category:** Bug\
**Tags:** unsupported-install\
**Created:** [Mars 7, 2023, 2:27 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380 "2023-03-07T14:27:26Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Mars 7, 2023, 2:27 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/1 "2023-03-07T14:27:26Z")

</div>

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 :

```plaintext
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'

```

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Mars 7, 2023, 2:40 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/2 "2023-03-07T14:40:14Z")

</div>

Eh bien, en regardant \n\n[discourse/app/controllers/stylesheets\_controller.rb at main · discourse/discourse · GitHub](https://github.com/discourse/discourse/blob/main/app/controllers/stylesheets_controller.rb#L66%5Cn%5CnIl) 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 ?

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Mars 7, 2023, 3:04 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/3 "2023-03-07T15:04:02Z")

</div>

Voici ce qui semble le résoudre :

```plaintext
    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.

---

<div class="post-metadata">

**Author:** ![Christoph](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/christoph/32/298628_2.png) [@Christoph](https://meta.discourse.org/u/Christoph)\
**Post date:** [Mars 18, 2023, 10:26 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/4 "2023-03-18T22:26:56Z")

</div>

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…

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Mars 24, 2023, 3:59 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/5 "2023-03-24T15:59:44Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Christoph](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/christoph/32/298628_2.png) [@Christoph](https://meta.discourse.org/u/Christoph)\
**Post date:** [Mars 24, 2023, 4:21 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/6 "2023-03-24T16:21:09Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Pete\_Bondurant](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pete_bondurant/32/245788_2.png) [@Pete\_Bondurant](https://meta.discourse.org/u/Pete_Bondurant)\
**Post date:** [Avril 13, 2023, 6:45 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/7 "2023-04-13T06:45:44Z")

</div>

> [@pfaffman](#):
>
> peut-être que cela n’est pas transmis par Apache

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.

---

<div class="post-metadata">

**Author:** ![Pete\_Bondurant](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pete_bondurant/32/245788_2.png) [@Pete\_Bondurant](https://meta.discourse.org/u/Pete_Bondurant)\
**Post date:** [Avril 13, 2023, 12:46 UTC](https://meta.discourse.org/t/argumenterror-comparison-of-time-with-string-failed-in-stylesheet-controller/257380/8 "2023-04-13T12:46:08Z")

</div>

@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 !
