ArgumentError (comparación de Time con String fallida) en el controlador de hojas de estilo

Tengo una configuración de subcarpeta/proxy inverso bastante típica con Apache como proxy inverso.

Primero hubo problemas con activos inseguros, así que forcé force_https en ENV. Ahora, al recuperar activos como stylesheets/color_definitions_light_7_1_6cfae4de9c47a1b8ed3d5748018236d10ea9107e.css?__ws=site.com

Quizás estoy haciendo algo estúpido, pero estoy obteniendo esto:

ArgumentError (la comparación de Time con String falló)
app/controllers/stylesheets_controller.rb:66:in `<='
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 me gusta

Bueno, mirando en

Parece que stylesheet_time es una cadena, así que cambiar esa línea a

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

resuelve el problema. No entiendo cómo está sucediendo ahora, ya que no veo ningún commit reciente que afecte esto.

Así es como está configurado:

    stylesheet_time = query.pick(:created_at)

Parecería que :created_at sería una fecha adecuada. ¿Podría haber cambiado alguna gema subyacente? ¿Y cómo no se habría detectado esto en las pruebas?

1 me gusta

Aquí está lo que parece arreglarlo:

    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

Parece que es posible que to_date convierta algo que es “truthy” en una fecha nula, supongo.

No. Eso tampoco funciona. Terminé envolviendo la sección en un begin/rescue/end.

Estoy muy confundido sobre cómo esto podría estar afectando solo a esta subcarpeta/sitio con proxy inverso.

Tal vez tenga que ver con

      cache_time = request.env["HTTP_IF_MODIFIED_SINCE"]

y tal vez eso no se esté pasando desde Apache o algo así, o esté llegando una cadena de fecha no válida.

Solía haber un rescue nil en eso, pero eso fue hace 5 años.

Y creo que es difícil de depurar ya que es una caché, así que para depurar necesitaría vaciar esa caché para probar si está funcionando.

1 me gusta

Tuve el mismo problema (también al usar la configuración de subcarpeta). Después de corregir una advertencia de contenido mixto no relacionada estableciendo la configuración force_https en true, el problema desapareció…

2 Me gusta

Maldición. Esperaba que esto me salvara, pero ya tengo DISCOURSE_FORCE_HTTPS: true en el yml.

Ahora estoy aún más confundido sobre cómo es solo este sitio el que tiene el problema.

He cambiado la configuración de “forzar https” en la interfaz de administración, pero probablemente sea lo mismo.

1 me gusta

¡Hola!

Tengo exactamente el mismo problema con NGINX en lugar de Apache como proxy inverso.
¿Encontraste alguna solución?

Por cierto, solo ha fallado con la versión de escritorio, no hay ningún problema con la versión móvil.
Lo he solucionado deshabilitando el almacenamiento en búfer en el proxy inverso.

1 me gusta

@pfaffman Simplemente degradé de una 3.1.0.beta3 a 3.1.0.beta2, todo salió bien y ahora funciona perfectamente como debería.

No tengo suficiente experiencia con Discourse para comprobar qué salió mal o registrar un error, especialmente en una instalación no compatible.

¡Pero si puedo ser de ayuda, estaré encantado!