ログインせずに公開トピックにアクセスする際のバグ 3.1.0.beta2

再現手順:
セキュリティ設定で「全員が閲覧可能」なカテゴリを作成します。


Discourse からログアウトします。
このカテゴリ内の投稿にアクセスします。
私のサイト:
https://forum.rat-adv.com/t/test-posta-na-chwile/1315

以下が表示されます:

# Oops

This discussion forum is powered by software that encountered an unexpected problem. We apologize for the inconvenience.

Detailed information about the error was logged, and an automatic notification generated. We'll take a look at it.

No further action is necessary. However, if the error condition persists, you can provide additional detail, including steps to reproduce the error, by posting a discussion topic in the site's feedback category.

Discourse にログインすると、
このリンクは機能します。

ログには以下が表示されます:

noMethodError のスタックトレース:

lib/guardian/topic_guardian.rb:146:in `can_recover_topic?'

app/serializers/topic_view_details_serializer.rb:119:in `include_can_recover?'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:375:in `include?'

(eval):9:in `_fast_attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:455: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/associations.rb:200:in `serialize'

lib/freedom_patches/ams_include_without_root.rb:57:in `include!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:368:in `block in include_associations!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `each_key'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `include_associations!'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:362:in `serializable_hash'

active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'

activesupport (7.0.4.1) lib/active_support/json/encoding.rb:22:in `encode'

activesupport (7.0.4.1) lib/active_support/json/encoding.rb:22:in `encode'

activesupport (7.0.4.1) lib/active_support/core_ext/object/json.rb:42: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/topics_controller.rb:1238:in `block (2 levels) in perform_show_response'

actionpack (7.0.4.1) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'

app/controllers/topics_controller.rb:1232:in `perform_show_response'

app/controllers/topics_controller.rb:187:in `show'

actionpack (7.0.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'

actionpack (7.0.4.1) lib/abstract_controller/base.rb:215:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/rendering.rb:53:in `process_action'

actionpack (7.0.4.1) lib/abstract_controller/callbacks.rb:234:in `block in process_action'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:118:in `block in run_callbacks'

app/controllers/application_controller.rb:414:in `block in with_resolved_locale'

i18n (1.12.0) lib/i18n.rb:322:in `with_locale'

app/controllers/application_controller.rb:414:in `with_resolved_locale'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:127:in `block in run_callbacks'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:138:in `run_callbacks'

actionpack (7.0.4.1) lib/abstract_controller/callbacks.rb:233:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'

activesupport (7.0.4.1) lib/active_support/notifications.rb:206:in `block in instrument'

activesupport (7.0.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'

activesupport (7.0.4.1) lib/active_support/notifications.rb:206:in `instrument'

actionpack (7.0.4.1) lib/action_controller/metal/instrumentation.rb:66:in `process_action'

actionpack (7.0.4.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'

activerecord (7.0.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'

actionpack (7.0.4.1) lib/abstract_controller/base.rb:151:in `process'

actionview (7.0.4.1) lib/action_view/rendering.rb:39:in `process'

rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'

actionpack (7.0.4.1) lib/action_controller/metal.rb:188:in `dispatch'

actionpack (7.0.4.1) lib/action_controller/metal.rb:251:in `dispatch'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:32:in `serve'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:32:in `each'

actionpack (7.0.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'

actionpack (7.0.4.1) lib/action_dispatch/routing/route_set.rb:852:in `call'

lib/middleware/omniauth_bypass_middleware.rb:74:in `call'

rack (2.2.6.2) lib/rack/tempfile_reaper.rb:15:in `call'

rack (2.2.6.2) lib/rack/conditional_get.rb:27:in `call'

rack (2.2.6.2) lib/rack/head.rb:12:in `call'

actionpack (7.0.4.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'

lib/content_security_policy/middleware.rb:12:in `call'

lib/middleware/anonymous_cache.rb:367:in `call'

rack (2.2.6.2) lib/rack/session/abstract/id.rb:266:in `context'

rack (2.2.6.2) lib/rack/session/abstract/id.rb:260:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/cookies.rb:704:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'

activesupport (7.0.4.1) lib/active_support/callbacks.rb:99:in `run_callbacks'

actionpack (7.0.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/show_exceptions.rb:26:in `call'

logster (2.11.4) lib/logster/middleware/reporter.rb:43:in `call'

railties (7.0.4.1) lib/rails/rack/logger.rb:40:in `call_app'

railties (7.0.4.1) lib/rails/rack/logger.rb:27:in `call'

config/initializers/100-quiet_logger.rb:20:in `call'

config/initializers/100-silence_logger.rb:29:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'

lib/middleware/enforce_hostname.rb:24:in `call'

rack (2.2.6.2) lib/rack/method_override.rb:24:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'

rack (2.2.6.2) lib/rack/sendfile.rb:110:in `call'

actionpack (7.0.4.1) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'

rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'

message_bus (4.3.2) lib/message_bus/rack/middleware.rb:60:in `call'

lib/middleware/request_tracker.rb:228:in `call'

railties (7.0.4.1) lib/rails/engine.rb:530:in `call'

railties (7.0.4.1) lib/rails/railtie.rb:226:in `public_send'

railties (7.0.4.1) lib/rails/railtie.rb:226:in `method_missing'

rack (2.2.6.2) lib/rack/urlmap.rb:74:in `block in call'

rack (2.2.6.2) lib/rack/urlmap.rb:58:in `each'

rack (2.2.6.2) lib/rack/urlmap.rb:58:in `call'

unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'

unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'

unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'

unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'

unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'

vendor/bundle/ruby/3.1.0/bin/unicorn:25:in `load'

vendor/bundle/ruby/3.1.0/bin/unicorn:25:in `<main>'

Piotr

「いいね!」 1

こんにちは、アリーンさん。:slight_smile:

指示に従ったところ、問題は発生しませんでした。

セーフモードでフォーラムにトピックを入力しようとしましたが、どのカテゴリのどのトピックでもエラーが発生しました。

フォーラムを再構築しても問題は発生しませんか?(./launcher rebuild app)プラグインはインストールされていますか?

「いいね!」 1

生のページ https://forum.rat-adv.com/raw/1315 を開いてからトピックを再度作成すると、トピックのテキストを取得できます。(ただし、壊れたトピックはまだここにあります)

こんにちは
ページをRAWモードで開けることを知りませんでした。役に立ちそうです :slight_smile:
これらのトピックはRAWモードで表示されます!

しかし、問題は公開されているすべてのページで発生します。これらは表示されません。

試したこと:
カテゴリの公開権限を削除/追加する
公開カテゴリに新しい投稿を追加する
新しいカテゴリを追加して、メインエントリが表示されるか確認する

結果は同じでした。
ページ情報(ログ内):

NoMethodError (undefined method `has_trust_level?' for nil:NilClass

         (SiteSetting.tl4_delete_posts_and_topics && user.has_trust_level?(TrustLevel[4]))
                                                         ^^^^^^^^^^^^^^^^^)
lib/guardian/topic_guardian.rb:146:in `can_recover_topic?'

以下が問題の原因だと考えています。

  1. ダウンロードしたコードに問題があるようです。ソースコードをプルしてから再構築します。
  2. PostgreSQLに保存されているデータに問題があるようです。これはより困難になるでしょう。

達成したことを報告します。

「いいね!」 2

こんにちは
ソースコードを確認したところ、問題はこのコミットにあるようです

ログインしていないユーザーには、信頼レベルを持つユーザープロファイルがないのだと思います。
私のリポジトリでこのメソッドの変更をロールバックしましたが、次にどうすればよいかわかりません。Rubyでプログラミングしていません。

このコードスニペットを修正するために、次に何が起こるべきですか?

よろしくお願いします。
Piotr

「いいね!」 3

こんにちは。

この問題を再現できました。

サイト設定の tl4 delete posts and topics を有効にすると、匿名のトピックが壊れます。

応急処置: 修正が来るまで、この設定を無効にしてください。 :slightly_smiling_face:

「いいね!」 4

@kris.kotlarek さんがこれを修正したと思います。再構築してもう一度試していただけますか?

「いいね!」 3

はい、今日やります。結果について書きます。

「いいね!」 1

一貫性のためにワンボックスを追加します。:slight_smile:

「いいね!」 1

このトピックは4日後に自動的に閉じられました。新しい返信は許可されなくなりました。