Erreur interne : méthode `visibility_reason_id` non définie

Je gère une instance Discourse sur https://lilypond.community. Il y a quelques heures, j’ai utilisé l’interface Web pour mettre à niveau Discourse vers la version 3.3.0beta2. Cela a échoué avec la même erreur que sur 3.3.0.beta2-dev update error - #8 by david. À ce moment-là, je n’ai pas eu le temps d’enquêter, alors je l’ai laissé tel quel, mais le forum semblait toujours fonctionnel. Maintenant, il affiche :

Oups

Le logiciel qui alimente ce forum de discussion a rencontré un problème inattendu. Nous nous excusons pour la gêne occasionnée.

Les informations détaillées sur l’erreur ont été enregistrées et une notification automatique a été générée. Nous allons y jeter un œil.

Aucune autre action n’est nécessaire. Cependant, si la condition d’erreur persiste, vous pouvez fournir des détails supplémentaires, y compris les étapes pour reproduire l’erreur, en publiant un sujet de discussion dans la catégorie des commentaires du site.

sur n’importe quelle page (/, /t/topic-slug, etc.).

J’ai suivi les conseils du sujet lié :

cd /var/discourse
git pull
./launcher rebuild app
./launcher start app

mais cela n’a pas aidé. Je ne suis pas sûr à 100% que le problème soit réellement lié à la mise à niveau, bien que je le trouve probable.

Voici ce que je trouve dans /var/discourse/shared/standalone/log/rails/production.log, juste après avoir tenté d’accéder à la page https://lilypond.community/t/effacer-les-citations-du-conducteur/5698/8 :

Started GET "/t/effacer-les-citations-du-conducteur/5698/8" for [IP redacted] at 2024-05-16 20:49:53 +0000
Processing by TopicsController#show as HTML
  Parameters: {"slug"=>"effacer-les-citations-du-conducteur", "topic_id"=>"5698", "post_number"=>"8"}
Completed 500 Internal Server Error in 39ms (ActiveRecord: 0.0ms | Allocations: 14832)
NoMethodError (undefined method `visibility_reason_id' for #<Topic id: 5698, title: "Effacer les citations du conducteur", [...]>)
app/serializers/topic_view_serializer.rb:327:in `include_visibility_reason_id?'
(eval):37:in `_fast_attributes'
app/controllers/topics_controller.rb:1360:in `block (2 levels) in perform_show_response'
app/controllers/topics_controller.rb:1354:in `perform_show_response'
app/controllers/topics_controller.rb:187:in `show'
app/controllers/application_controller.rb:423:in `block in with_resolved_locale'
app/controllers/application_controller.rb:423:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:391:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14: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:277:in `call'
start
done

Pour une page utilisateur :

Started GET "/u/jeanas/" for [IP redacted] at 2024-05-16 20:47:21 +0000
Processing by UsersController#show as HTML
  Parameters: {"username"=>"jeanas"}
Completed 500 Internal Server Error in 180ms (ActiveRecord: 0.0ms | Allocations: 80166)
NoMethodError (undefined method `custom_homepage' for #<ThemeModifierHelper:0x00007f37a9f775c8 @theme_ids=[1]>)
app/serializers/user_serializer.rb:327:in `can_pick_theme_with_custom_homepage'
(eval):100:in `_fast_attributes'
app/controllers/users_controller.rb:152:in `block (2 levels) in show'
app/controllers/users_controller.rb:149:in `show'
app/controllers/application_controller.rb:423:in `block in with_resolved_locale'
app/controllers/application_controller.rb:423:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14: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:277:in `call'

Et pour la page d’accueil :

Started GET "/" for [IP redacted] at 2024-05-16 20:54:16 +0000
NoMethodError (undefined method `custom_homepage' for #<ThemeModifierHelper:0x00007f37aba0c488 @theme_ids=[]>)
lib/homepage_helper.rb:5:in `resolve'
lib/homepage_constraint.rb:12:in `matches?'
lib/middleware/omniauth_bypass_middleware.rb:64:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:393:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14: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:277:in `call'

En regardant le code, il semble que visibility_reason_id et autres soient des champs de base de données nouveaux dans cette version, qui étaient censés être ajoutés à la base de données existante par des scripts de migration (par exemple, db/migrate/20240423013808_add_visibility_reason_id_to_topics.rb). Je soupçonne que la mise à niveau s’est arrêtée à mi-chemin avant de les exécuter.

Existe-t-il un moyen de revenir proprement à la version 3.3.0beta1 et de refaire la migration ? Est-il dangereux de faire git checkout v3.3.0.beta1 à l’intérieur du conteneur Docker (./launcher enter app) ?

Est-ce que cela se produit toujours si vous reconstruisez une deuxième fois ? Que dit le journal de reconstruction si le problème persiste ? :thinking:

3 « J'aime »

Oh, ça a fonctionné. Merci !

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.