Problème avec les révisions de publication après la mise à jour vers 2.8.6 stable ou 2.9.0.beta7

We are noticing some posts where the previous revisions are not showing:

(there’s no text at all and notice the NaN on a post with 3 versions)

On the console I’m seeing a 500 error on /posts/X/revisions/latest.json .

On /logs I’m seeing the error below. This is on 2.8.6. We only noticed this after updating yesterday from 2.8.4, but I can’t guarantee it is related as we noticed this only in a couple of posts. I have tried rebuilt the container, but made no difference.

Psych::DisallowedClass (Tried to load unspecified class: Symbol)
app/serializers/post_revision_serializer.rb:233:in `block in all_revisions'
app/serializers/post_revision_serializer.rb:228:in `each'
app/serializers/post_revision_serializer.rb:228:in `all_revisions'
app/serializers/post_revision_serializer.rb:187:in `revisions'
app/serializers/post_revision_serializer.rb:254:in `previous'
app/serializers/post_revision_serializer.rb:50:in `previous_hidden'
(eval):5:in `_fast_attributes'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/posts_controller.rb:425:in `latest_revision'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:198:in `call'

Backtrace:

/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:97:in `find'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:28:in `load'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:39:in `block (2 levels) in <class:ClassLoader>'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:32:in `symbolize'
/usr/local/lib/ruby/2.7.0/psych/class_loader.rb:82:in `symbolize'
/usr/local/lib/ruby/2.7.0/psych/scalar_scanner.rb:74:in `tokenize'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:60:in `deserialize'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:123:in `visit_Psych_Nodes_Scalar'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:339:in `block in revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each_slice'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:162:in `visit_Psych_Nodes_Mapping'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `block in register_empty'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:332:in `register_empty'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:141:in `visit_Psych_Nodes_Sequence'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:340:in `block in revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `each_slice'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:338:in `revive_hash'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:162:in `visit_Psych_Nodes_Mapping'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:313:in `visit_Psych_Nodes_Document'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:16:in `visit'
/usr/local/lib/ruby/2.7.0/psych/visitors/visitor.rb:6:in `accept'
/usr/local/lib/ruby/2.7.0/psych/visitors/to_ruby.rb:32:in `accept'
/usr/local/lib/ruby/2.7.0/psych.rb:360:in `safe_load'
activerecord (6.1.6.1) lib/active_record/coders/yaml_column.rb:50:in `yaml_load'
activerecord (6.1.6.1) lib/active_record/coders/yaml_column.rb:26:in `load'
activerecord (6.1.6.1) lib/active_record/type/serialized.rb:22:in `deserialize'
activemodel (6.1.6.1) lib/active_model/type/helpers/mutable.rb:8:in `cast'
activemodel (6.1.6.1) lib/active_model/attribute.rb:175:in `type_cast'
activemodel (6.1.6.1) lib/active_model/attribute.rb:43:in `value'
activemodel (6.1.6.1) lib/active_model/attribute_set.rb:42:in `fetch_value'
activerecord (6.1.6.1) lib/active_record/attribute_methods/read.rb:36:in `_read_attribute'
activemodel (6.1.6.1) lib/active_model/attribute_methods.rb:254:in `modifications'
app/serializers/post_revision_serializer.rb:233:in `block in all_revisions'
app/serializers/post_revision_serializer.rb:228:in `each'
app/serializers/post_revision_serializer.rb:228:in `all_revisions'
app/serializers/post_revision_serializer.rb:187:in `revisions'
app/serializers/post_revision_serializer.rb:254:in `previous'
app/serializers/post_revision_serializer.rb:50:in `previous_hidden'
(eval):5:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
activesupport (6.1.6.1) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.6.1) lib/active_support/json/encoding.rb:22:in `encode'
activesupport (6.1.6.1) lib/active_support/core_ext/object/json.rb:43:in `to_json'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:331:in `to_json'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapters/oj.rb:56:in `dump'
multi_json (1.15.0) lib/multi_json/adapter.rb:25:in `dump'
multi_json (1.15.0) lib/multi_json.rb:139:in `dump'
app/controllers/application_controller.rb:510:in `render_json_dump'
app/controllers/posts_controller.rb:425:in `latest_revision'
actionpack (6.1.6.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.6.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.6.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:387:in `block in with_resolved_locale'
i18n (1.8.11) lib/i18n.rb:314:in `with_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.6.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.6.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.6.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.6.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.6.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.6.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.6.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.6.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.6.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method'
actionpack (6.1.6.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.6.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.6.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.6.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.6.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:361:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.6.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.6.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.6.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties
2 « J'aime »

Est-ce un site public ? Pouvez-vous partager un lien vers les publications concernées ? (Par MP si vous préférez)

3 « J'aime »

Envoyé par MP. Heureux de l’envoyer à d’autres si nécessaire.

2 « J'aime »

J’ai jeté un coup d’œil rapide aux liens que vous avez partagés et il semble que les publications sans révisions de modification manquantes soient celles qui ont également les dates dans l’en-tête du sujet. Avez-vous un composant de thème qui ajoute cela ?

4 « J'aime »

Je ne suis pas sûr si vous parlez du titre du sujet ou d’autre chose. Les titres des sujets, malgré leur apparence, sont ajoutés manuellement. Bien que, oui, les deux messages avec le problème semblent se produire dans une catégorie parente commune où les gens organisent des réunions.

Nous utilisons le plugin paviliondev/discourse-events et les sujets de cette catégorie ont bien un événement associé dans le premier message (c’est là que ce problème se produit). Cependant, l’utilisation du mode sans échec pour désactiver le plugin n’a pas semblé résoudre le problème des révisions.

Y a-t-il autre chose que je puisse essayer ?

3 « J'aime »

Je pense que cela doit être lié à SECURITY: Bump Rails to 6.1.6.1 (stable) (#17470) · discourse/discourse@bb287c6 · GitHub. Je regarde actuellement certains de nos propres sites et il semble que nous ayons des journaux d’erreurs similaires. Je vais le corriger et je mettrai à jour ici quand ce sera fait :eyes:

6 « J'aime »

Cela devrait être corrigé par https://github.com/discourse/discourse/commit/7d9b98a1614c48905df129b8691a07a834fa12f7

et sur la branche stable FIX: Allow Time objects to be deserialized in PostRevision (stable) (… · discourse/discourse@5d2ecce · GitHub

Pour mettre à jour une installation standard, visitez /admin/upgrade

7 « J'aime »

J’ai toujours ce problème, après la mise à niveau.


C’est plus occasionnel, mais cela arrive encore de temps en temps.

3 « J'aime »

Merci pour votre travail rapide. Mais je crains que cela ne l’ait pas résolu pour nous. Les deux publications que j’ai mentionnées se comportent toujours de la même manière, sans versions visibles. J’ai essayé /admin/upgrade et sa reconstruction.

2 « J'aime »

Désolé pour cela ! Cette correction a aidé avec des erreurs similaires que nous rencontrions sur notre hébergement, il doit donc y avoir quelque chose de plus en jeu sur votre site. Très probablement lié à un plugin/une importation.

Veuillez visiter /logs et rechercher les erreurs telles que

Psych::DisallowedClass (Tentative de chargement de la classe non spécifiée : Time)

La version “Time” est la seule que nous voyions, et elle devrait maintenant être résolue. Quelles autres erreurs de “classe non spécifiée” voyez-vous dans vos journaux ?

1 « J'aime »

Ah, donc ce n’est peut-être pas le même problème alors.

Toutes les erreurs Psych::DisallowedClass que nous avons vues concernent la classe unspecified class: Symbol, comme indiqué dans la trace de la pile publiée précédemment.

J’ai essayé de désactiver les événements (du plugin paviliondev/discourse-events) sur cette catégorie particulière, mais cela seul ne semble pas faire de différence.

L’erreur ci-dessus donne-t-elle un indice avant que je ne passe à la désactivation du plugin sur l’ensemble du forum (ce qui nécessitera des reconstructions) ?

2 « J'aime »

Malheureusement, je ne pense pas que désactiver le plugin fera une différence. Les données problématiques sont déjà stockées dans la base de données, donc elles y resteront. Je pense que nous pouvons ajouter Symbol à la liste des classes autorisées sans risque. Je vais le faire :eyes:

Edit : pour être clair, ce n’est pas vraiment la faute du plugin. Auparavant, tout type de données pouvait être stocké dans PostRevision. Le problème de sécurité de Rails nous a obligés à changer soudainement le comportement et à limiter les types de données autorisés.

3 « J'aime »

Pouvez-vous réessayer la mise à jour @mentalstring - Je viens de pousser FIX: Allow Symbol objects to be deserialized in PostRevision (stable)… · discourse/discourse@f0ef186 · GitHub

3 « J'aime »

C’est tout — ça fonctionne comme prévu maintenant ! :+1:

Merci d’avoir examiné cela si rapidement.

3 « J'aime »

Salut, ça ne fonctionne toujours pas après la mise à jour.

@darkpixlz pouvez-vous suivre ces étapes et nous dire ce que vous trouvez :


Je ne vois que ces choses.

Hmm ok, il semble que vous ayez des erreurs pour User et Group. Pouvez-vous partager une liste des plugins installés sur le site ?

1 « J'aime »

Plugins :
Discourse-Akismet
Discourse Apple Login
Discourse BCC
Discourse Cakeday
Discourse Calendar
Discourse Chat
Discourse Custom Wizard
Discourse follow
Discourse Gamification
Discourse Mate
Discourse Microsoft login
Discourse ImgFlip
Discourse Promethehus
Discourse Ratings
Discourse Solved
Discourse Spoiler
Discourse Steam Login
Discourse Tickets
Discourse Userr Network
Discourse User Notes
Discourse Voting
Discourse QA
Discourse Who’s online
Discourse Yearly Review
Discourse Manager
Styleguide
Je peux obtenir des composants si vous le souhaitez

1 « J'aime »

Aka, nous avons à peu près tous les plugins qui sont fonctionnels :rofl:

1 « J'aime »