설문조사가 포함된 게시글이 로드되지 않습니다

v2.4.0beta8로 업그레이드한 이후, 임베드된 투표(poll)가 포함된 게시물은 다음 트레이스백과 함께 로드되지 않습니다:

/discourse/vendor/bundle/ruby/2.6.0/gems/activemodel-6.0.1/lib/active_model/attribute_methods.rb:431:in `method_missing'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:99:in `block in attribute'
(eval):15:in `_fast_attributes'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:468:in `rescue in attributes'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:455:in `attributes'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:480:in `_serializable_hash'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:359:in `serializable_hash'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:347:in `as_json'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/json/encoding.rb:22:in `encode'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/json/encoding.rb:22:in `encode'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/core_ext/object/json.rb:42:in `to_json'
/discourse/vendor/bundle/ruby/2.6.0/gems/active_model_serializers-0.8.4/lib/active_model/serializer.rb:331:in `to_json'
/discourse/vendor/bundle/ruby/2.6.0/gems/multi_json-1.13.1/lib/multi_json/adapters/oj.rb:40:in `dump'
/discourse/vendor/bundle/ruby/2.6.0/gems/multi_json-1.13.1/lib/multi_json/adapters/oj.rb:40:in `dump'
/discourse/vendor/bundle/ruby/2.6.0/gems/multi_json-1.13.1/lib/multi_json/adapter.rb:25:in `dump'
/discourse/vendor/bundle/ruby/2.6.0/gems/multi_json-1.13.1/lib/multi_json.rb:139:in `dump'
/discourse/app/controllers/topics_controller.rb:1003:in `block (2 levels) in perform_show_response'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
/discourse/app/controllers/topics_controller.rb:1000:in `perform_show_response'
/discourse/app/controllers/topics_controller.rb:164:in `show'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:196:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:135:in `run_callbacks'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `block in instrument'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/notifications.rb:180:in `instrument'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/abstract_controller/base.rb:136:in `process'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/rendering.rb:39:in `process'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiling_methods.rb:104:in `block in profile_method'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:191:in `dispatch'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_controller/metal.rb:252:in `dispatch'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:49:in `block in serve'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `each'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/journey/router.rb:32:in `serve'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/routing/route_set.rb:837:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.0.7/lib/rack/protection/frame_options.rb:31:in `call'
/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:25:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/head.rb:12:in `call'
/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/discourse/lib/middleware/anonymous_cache.rb:274:in `call'
/discourse/config/initializers/008-rack-cors.rb:25:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232:in `context'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/cookies.rb:648:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.1/lib/active_support/callbacks.rb:101:in `run_callbacks'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/logster-2.4.1/lib/logster/middleware/reporter.rb:43:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:38:in `call_app'
/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/rack/logger.rb:28:in `call'
/discourse/config/initializers/100-quiet_logger.rb:18:in `call'
/discourse/config/initializers/100-silence_logger.rb:31:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/method_override.rb:22:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/static.rb:126:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-6.0.1/lib/action_dispatch/middleware/host_authorization.rb:77:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/mini_profiler/profiler.rb:296:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/rack/middleware.rb:57:in `call'
/discourse/lib/middleware/request_tracker.rb:176:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/engine.rb:526:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'
/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68:in `block in call'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `each'
/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/configuration.rb:227:in `call'
/discourse/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:660:in `handle_request'
/discourse/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:474:in `process_client'
/discourse/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/server.rb:334:in `block in run'
/discourse/vendor/bundle/ruby/2.6.0/gems/puma-3.12.1/lib/puma/thread_pool.rb:135:in `block in spawn_thread'

투표(poll)가 포함된 게시물을 생성하려고 해도 실패합니다. 공식적으로 유지 관리되지 않는 플러그인은 설치하지 않았으며, [1]에 명시된 것과 마찬가지로 gems도 마찬가지입니다.

무엇을 놓치고 있는지 명백한 이유가 있을까요?

[1] https://gitlab.gnome.org/Infrastructure/discourse-web/blob/master/Dockerfile

다음 마이그레이션이 실행되지 않은 것 같습니다:

20191114160613_add_graph_to_polls.rb

그 결과 polls 테이블은 다음과 같은 구조를 가지고 있습니다:

                                        Table "public.polls"
      Column      |            Type             |                     Modifiers                      
------------------+-----------------------------+----------------------------------------------------
 id               | bigint                      | not null default nextval('polls_id_seq'::regclass)
 post_id          | bigint                      | 
 name             | character varying           | not null default 'poll'::character varying
 close_at         | timestamp without time zone | 
 type             | integer                     | not null default 0
 status           | integer                     | not null default 0
 results          | integer                     | not null default 0
 visibility       | integer                     | not null default 0
 min              | integer                     | 
 max              | integer                     | 
 step             | integer                     | 
 anonymous_voters | integer                     | 
 created_at       | timestamp without time zone | not null
 updated_at       | timestamp without time zone | not null
Indexes:
    "polls_pkey" PRIMARY KEY, btree (id)
    "index_polls_on_post_id_and_name" UNIQUE, btree (post_id, name)
    "index_polls_on_post_id" btree (post_id)
Foreign-key constraints:
    "fk_rails_b50b782d08" FOREIGN KEY (post_id) REFERENCES posts(id)
Referenced by:
    TABLE "poll_votes" CONSTRAINT "fk_rails_a6e6974b7e" FOREIGN KEY (poll_id) REFERENCES polls(id)
    TABLE "poll_options" CONSTRAINT "fk_rails_aa85becb42" FOREIGN KEY (poll_id) REFERENCES polls(id)

마이그레이션은 컨테이너가 시작될 때마다 init 컨테이너를 통해 실행됩니다. 다음 질문은 왜 이 특정 마이그레이션만 스케줄링되지 않았는지를 이해하는 것입니다.

마이그레이션이 실행되어 문제를 해결했지만, 그 과정에서 또 다른 문제가 발생했습니다:

SecurityError: The operation is insecure. Url: https://discourse.gnome.org/assets/application-6cbf6fb051e218dafa1bf601dae045b532b3ec5125762bb09aac8ffaf3f25958.js Line: 1 Column: 0 

SecurityError: The operation is insecure.
Url: https://discourse.gnome.org/assets/application-6cbf6fb051e218dafa1bf601dae045b532b3ec5125762bb09aac8ffaf3f25958.js
Line: 1
Column: 0
Window Location: https://discourse.gnome.org//t/is-it-time-to-turn-shell-extension-version-locking-back-on/809

replaceState@https://discourse.gnome.org/assets/application-6cbf6fb051e218dafa1bf601dae045b532b3ec5125762bb09aac8ffaf3f25958.js:1:392500
initState@https://discourse.gnome.org/assets/application-6cbf6fb051e218dafa1bf601dae045b532b3ec5125762bb09aac8ffaf3f25958.js:1:391813
init@https://discourse.gnome.org/assets/application-6cbf6fb051e218dafa1bf601dae045b532b3ec5125762bb09aac8ffaf3f25958.js:1:391567
e@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:290766
h@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:281717
f</e.create@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:283033
v</t.create@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:94398
h/<@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:92267
h@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:92643
n</t.lookup@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:91157
lookup@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:272294
_</n._setupLocation@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:243579
_</n.setupRouter@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:240697
_</n.startRouting@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:240535
startRouting@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:319395
didBecomeReady@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:324708
f</t.invoke@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:482548
f</t.flush@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:481548
p</t.flush@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:483563
t</t._end@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:488992
t</t.end@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:485528
t</t._run@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:489530
t</t._join@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:489315
t</t.join@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:486236
p@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:352709
e.bind/<@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:352933
e@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:29470
l/</t<@https://discourse.gnome.org/assets/ember_jquery-c2cca4a19fd4c70eabc95b010a6d7643955ec2a2251aeb1d70f625773eebea21.js:1:29794

이것이 커스텀 설치라는 것을 아시나요? 이 설치 방식은 우리가 커스텀 Docker 이미지에서 수행하는 모든 작업을 무시하며, 이를 통해 누락된 마이그레이션과 같은 오류가 절대 발생하지 않도록 보장합니다.

제가 생각하기에, 사용자의 커스텀 구성은 부팅 시 플러그인 마이그레이션을 누락하고 있는 것 같습니다. 플러그인에서 마이그레이션이 실행되는 경우는 드물기 때문에, 이전에는 문제가 발생하지 않았습니다.

피드백 감사합니다. 저희 인프라는 OpenShift와 같은 도구를 기반으로 작동하도록 거의 대부분 커스터마이징되어 있어, 그 부분에서 놓친 점이 있었을 수 있겠다는 생각이 듭니다. 향후에는 업스트림의 Docker 이미지를 사용하는 방안을 검토해 보아야 할 것 같고, 무엇보다 중요한 것은 안정화된 릴리스 버전을 사용하는 것입니다(현재는 tests-passed 태그를 사용 중입니다). 제가 언급한 다른 이슈에 대해 어떤 의견이 있으신가요? 그 부분에도 피드백을 주시면 감사하겠습니다. 감사합니다!

이것은 자바스크립트 오류로, 브라우저 설정이 잘못되거나 확장 프로그램 등이 원인이 될 수 있습니다.

이 특정 경우에는 URL이 완전히 잘못된 형식입니다.

https://discourse.gnome.org//t/is-it-time-to-turn-shell-extension-version-locking-back-on/809

이중 //에 주목해 주세요. 이는 사용자 오타이거나 잘못 설정된 리버스 프록시 때문일 수 있습니다.

아, 맞아요. 방금 잘못된 리라이팅을 확인해서 바로 수정했고, 이제 정상적으로 돌아왔습니다! Rafael님, 정말 많은 도움 주셔서 감사합니다. 특히 저희 설치가 크게 커스터마이징되어 있어서 더욱 감사드립니다. 좋은 하루 보내세요!

오늘 발생한 두 가지 문제는 모두 스스로 초래한 것이므로 매우 중요합니다. 지원되는 설치 환경에서는 이러한 문제가 발생하지 않습니다.

Gnome 프로젝트를 응원합니다. 좋은 작업을 계속해 주세요!

관심 있는 분들을 위해, 두 번째 오류도 메타에서 발생합니다. 예시로 https://meta.discourse.org//t/posts-with-embedded-polls-fail-to-load/135549를 방문해 보세요 :slight_smile:

기본 URL 파서 스펙에 따르면, 경로가 슬래시 두 개로 시작하는 경우 브라우저가 항상 검증 오류를 발생시키는 것으로 보입니다.

discourse가 history.replaceState()에 전달하는 경로가 유효한지 확인한 후 수정해야 한다고 주장할 수도 있지만, 실제 환경에서는 비교적 드문 일을 위해 자체 URL 파서와 자동 수정기를 구현하는 것은 상당한 고통이 될 것입니다.

이 게시물은 WHATWG HTML living standards를 읽다가 녹아내린 뇌로 작성되었습니다

이 토픽이 오늘 자동으로 올라왔기 때문에 이 문제를 시도해 보기로 했습니다. Ubuntu에서 최신 Chrome 브라우저로 이 URL을 테스트해 보았습니다:
https://meta.discourse.org//t/posts-with-embedded-polls-fail-to-load/135549/9

이제 URL은 이중 //을 수정하도록 재작성되어 저에게는 아무 문제 없이 로드됩니다: https://meta.discourse.org//t/posts-with-embedded-polls-fail-to-load/135549/9