안녕하세요,
수년간 잘 운영되어 온 Scala PL 사용자들을 위한 Discourse 포럼이 있습니다:
지난주에 "./launcher rebuild app"을 사용하여 최신 버전으로 업그레이드한 후, “Oops - Error 500” 오류가 매우 자주 발생하고 있습니다. 웹사이트를 이미 방문한 상태일 때 이 오류가 나타납니다. 브라우저의 개인 창에서는 정상적으로 작동합니다. 따라서 브라우저의 웹사이트 데이터를 지우면 잠시 동안 문제가 해결되지만, 다시 재발합니다.
대시보드에서 두 번 Discourse를 업데이트하고, "./launcher rebuild app"을 사용하여 다시 빌드해 보았지만 여전히 동일한 문제가 발생합니다.
log/rails/production.log 파일에서는 다음 내용만 확인할 수 있습니다:
Started GET "/" for 127.0.0.1 at 2026-09-03 09:57:56 +0000
Processing by ListController#latest as HTML
Rendered layout layouts/application.html.erb (Duration: 391.6ms | GC: 229.5ms)
Completed 500 Internal Server Error in 474ms (Views: 392.5ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 236.0ms)
무엇이 잘못되었는지, 그리고 이 문제를 해결하기 위해 무엇을 할 수 있는지 아이디어가 있을까요?
감사합니다!
Fabien
더 자세히 살펴보니, _t 쿠키를 삭제하면 "오류 500"이 사라지지만, 로그인 후 약 1시간 정도 후에 다시 나타납니다.
v2026.9.0는 아직 릴리스되지 않았습니다 - 개발/최신 버전을 말씀하시는 건가요?
특정 버전을 지정하지 않았기 때문에, 기본적으로 최신 버전이어야 합니다 ("tests-passed" is now "latest" 참고). 대시보드에서 하단에 표시되는 버전이 바로 이 버전입니다.
/logs에서 500 에러를 찾아 에러 내용과 백트레이스를 공유해 줄 수 있나요?
로그(production.log)에만 그 내용이 있고, 다른 곳에는 없습니다:
Started GET "/" for 127.0.0.1 at 2026-09-07 08:05:50 +0000
Processing by ListController#latest as HTML
Rendered layout layouts/application.html.erb (Duration: 164.0ms | GC: 13.5ms)
Completed 500 Internal Server Error in 248ms (Views: 164.7ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 15.9ms)
더 많은 디버그 정보를 추가하는 방법을 찾을 수 없었습니다.
참고로, /safe-mode를 사용해보았지만 아무런 변화가 없습니다…
그게 실패하지 않는 한 /logs 경로에 있습니다.
죄송합니다, 컨테이너 로그를 보고 있었습니다.
여기에 있습니다:
메시지 (18개 복사본 보고됨)
PG::InvalidTextRepresentation (ERROR: invalid input syntax for type inet: "unix:"
LINE 7: client_ip = 'unix:',
^
)
lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
app/models/user_auth_token.rb:244:in 'UserAuthToken#rotate!'
lib/auth/default_current_user_provider.rb:260:in 'Auth::DefaultCurrentUserProvider#refresh_session'
lib/current_user.rb:52:in 'CurrentUser#refresh_session'
app/controllers/application_controller.rb:91:in 'ApplicationController#perform_refresh_session'
app/controllers/application_controller.rb:444:in 'block in ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:444:in 'ApplicationController#with_resolved_locale'
app/controllers/application_controller.rb:1126:in 'ApplicationController#ensure_dont_cache_page'
lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:13:in 'Middleware::CrawlerHooks#call'
lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
lib/middleware/anonymous_cache.rb:431:in 'Middleware::AnonymousCache#call'
lib/middleware/csp_script_nonce_injector.rb:13:in 'Middleware::CspScriptNonceInjector#call'
lib/middleware/track_view_session_id_injector.rb:12:in 'Middleware::TrackViewSessionIdInjector#call'
config/initializers/008-rack-cors.rb:14:in 'Discourse::Cors#call'
lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
lib/middleware/enforce_hostname.rb:23:in 'Middleware::EnforceHostname#call'
lib/middleware/request_tracker.rb:381:in 'Middleware::RequestTracker#call'
lib/middleware/overload_protections.rb:18:in 'Middleware::OverloadProtections#call'
lib/middleware/processing_request.rb:14:in 'Middleware::ProcessingRequest#call'
Backtrace
rack-mini-profiler (4.0.1) lib/patches/db/pg/alias_method.rb:112:in 'PG::Connection#exec'
rack-mini-profiler (4.0.1) lib/patches/db/pg/alias_method.rb:112:in 'PG::Connection#async_exec'
mini_sql (1.6.0) lib/mini_sql/postgres/connection.rb:217:in 'MiniSql::Postgres::Connection#run'
mini_sql (1.6.0) lib/mini_sql/active_record_postgres/connection.rb:38:in 'block in MiniSql::ActiveRecordPostgres::Connection#run'
mini_sql (1.6.0) lib/mini_sql/active_record_postgres/connection.rb:34:in 'block in MiniSql::ActiveRecordPostgres::Connection#with_lock'
activesupport (8.0.5.1) lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
mini_sql (1.6.0) lib/mini_sql/active_record_postgres/connection.rb:34:in 'MiniSql::ActiveRecordPostgres::Connection#with_lock'
mini_sql (1.6.0) lib/mini_sql/active_record_postgres/connection.rb:38:in 'MiniSql::ActiveRecordPostgres::Connection#run'
lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
mini_sql (1.6.0) lib/mini_sql/postgres/connection.rb:196:in 'MiniSql::Postgres::Connection#exec'
app/models/user_auth_token.rb:244:in 'UserAuthToken#rotate!'
lib/auth/default_current_user_provider.rb:260:in 'Auth::DefaultCurrentUserProvider#refresh_session'
lib/current_user.rb:52:in 'CurrentUser#refresh_session'
app/controllers/application_controller.rb:91:in 'ApplicationController#perform_refresh_session'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:361:in 'block in ActiveSupport::Callbacks::CallTemplate::MethodCall#make_lambda'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:207:in 'ActiveSupport::Callbacks::Filters::After#call'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:563:in 'block in ActiveSupport::Callbacks::CallbackSequence#invoke_after'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:563:in 'Array#each'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:563:in 'ActiveSupport::Callbacks::CallbackSequence#invoke_after'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:134:in 'block in ActiveSupport::Callbacks#run_callbacks'
app/controllers/application_controller.rb:444:in 'block in ApplicationController#with_resolved_locale'
i18n (1.15.2) lib/i18n.rb:383:in 'I18n::Base#with_locale'
app/controllers/application_controller.rb:444:in 'ApplicationController#with_resolved_locale'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
app/controllers/application_controller.rb:1126:in 'ApplicationController#ensure_dont_cache_page'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:129:in 'block in ActiveSupport::Callbacks#run_callbacks'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:140:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.5.1) lib/abstract_controller/callbacks.rb:260:in 'AbstractController::Callbacks#process_action'
actionpack (8.0.5.1) lib/action_controller/metal/rescue.rb:27:in 'ActionController::Rescue#process_action'
actionpack (8.0.5.1) lib/action_controller/metal/instrumentation.rb:76:in 'block in ActionController::Instrumentation#process_action'
activesupport (8.0.5.1) lib/active_support/notifications.rb:210:in 'block in ActiveSupport::Notifications.instrument'
activesupport (8.0.5.1) lib/active_support/notifications/instrumenter.rb:58:in 'ActiveSupport::Notifications::Instrumenter#instrument'
activesupport (8.0.5.1) lib/active_support/notifications.rb:210:in 'ActiveSupport::Notifications.instrument'
actionpack (8.0.5.1) lib/action_controller/metal/instrumentation.rb:75:in 'ActionController::Instrumentation#process_action'
actionpack (8.0.5.1) lib/action_controller/metal/params_wrapper.rb:259:in 'ActionController::ParamsWrapper#process_action'
activerecord (8.0.5.1) lib/active_record/railties/controller_runtime.rb:39:in 'ActiveRecord::Railties::ControllerRuntime#process_action'
actionpack (8.0.5.1) lib/abstract_controller/base.rb:152:in 'AbstractController::Base#process'
actionview (8.0.5.1) lib/action_view/rendering.rb:40:in 'ActionView::Rendering#process'
rack-mini-profiler (4.0.1) lib/mini_profiler/profiling_methods.rb:116:in 'block in ActionController::Base#profile_method'
actionpack (8.0.5.1) lib/action_controller/metal.rb:252:in 'ActionController::Metal#dispatch'
actionpack (8.0.5.1) lib/action_controller/metal.rb:335:in 'ActionController::Metal.dispatch'
actionpack (8.0.5.1) lib/action_dispatch/routing/route_set.rb:67:in 'ActionDispatch::Routing::RouteSet::Dispatcher#dispatch'
actionpack (8.0.5.1) lib/action_dispatch/routing/route_set.rb:50:in 'ActionDispatch::Routing::RouteSet::Dispatcher#serve'
actionpack (8.0.5.1) lib/action_dispatch/routing/mapper.rb:32:in 'block in class:Constraints'
actionpack (8.0.5.1) lib/action_dispatch/routing/mapper.rb:62:in 'ActionDispatch::Routing::Mapper::Constraints#serve'
actionpack (8.0.5.1) lib/action_dispatch/journey/router.rb:53:in 'block in ActionDispatch::Journey::Router#serve'
actionpack (8.0.5.1) lib/action_dispatch/journey/router.rb:133:in 'block in ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.5.1) lib/action_dispatch/journey/router.rb:126:in 'Array#each'
actionpack (8.0.5.1) lib/action_dispatch/journey/router.rb:126:in 'ActionDispatch::Journey::Router#find_routes'
actionpack (8.0.5.1) lib/action_dispatch/journey/router.rb:34:in 'ActionDispatch::Journey::Router#serve'
actionpack (8.0.5.1) lib/action_dispatch/routing/route_set.rb:908:in 'ActionDispatch::Routing::RouteSet#call'
lib/middleware/omniauth_bypass_middleware.rb:35:in 'Middleware::OmniauthBypassMiddleware#call'
lib/middleware/crawler_hooks.rb:13:in 'Middleware::CrawlerHooks#call'
rack (2.2.24) lib/rack/tempfile_reaper.rb:15:in 'Rack::TempfileReaper#call'
rack (2.2.24) lib/rack/conditional_get.rb:27:in 'Rack::ConditionalGet#call'
rack (2.2.24) lib/rack/head.rb:12:in 'Rack::Head#call'
actionpack (8.0.5.1) lib/action_dispatch/http/permissions_policy.rb:38:in 'ActionDispatch::PermissionsPolicy::Middleware#call'
lib/content_security_policy/middleware.rb:12:in 'ContentSecurityPolicy::Middleware#call'
lib/middleware/anonymous_cache.rb:431:in 'Middleware::AnonymousCache#call'
lib/middleware/csp_script_nonce_injector.rb:13:in 'Middleware::CspScriptNonceInjector#call'
lib/middleware/track_view_session_id_injector.rb:12:in 'Middleware::TrackViewSessionIdInjector#call'
config/initializers/008-rack-cors.rb:14:in 'Discourse::Cors#call'
rack (2.2.24) lib/rack/session/abstract/id.rb:266:in 'Rack::Session::Abstract::Persisted#context'
rack (2.2.24) lib/rack/session/abstract/id.rb:260:in 'Rack::Session::Abstract::Persisted#call'
actionpack (8.0.5.1) lib/action_dispatch/middleware/cookies.rb:706:in 'ActionDispatch::Cookies#call'
actionpack (8.0.5.1) lib/action_dispatch/middleware/callbacks.rb:31:in 'block in ActionDispatch::Callbacks#call'
activesupport (8.0.5.1) lib/active_support/callbacks.rb:100:in 'ActiveSupport::Callbacks#run_callbacks'
actionpack (8.0.5.1) lib/action_dispatch/middleware/callbacks.rb:30:in 'ActionDispatch::Callbacks#call'
actionpack (8.0.5.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in 'ActionDispatch::DebugExceptions#call'
actionpack (8.0.5.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in 'ActionDispatch::ShowExceptions#call'
logster (2.21.0) lib/logster/middleware/reporter.rb:40:in 'Logster::Middleware::Reporter#call'
lib/middleware/default_headers.rb:13:in 'Middleware::DefaultHeaders#call'
railties (8.0.5.1) lib/rails/rack/logger.rb:41:in 'Rails::Rack::Logger#call_app'
railties (8.0.5.1) lib/rails/rack/logger.rb:29:in 'Rails::Rack::Logger#call'
config/initializers/100-quiet_logger.rb:20:in 'DiscourseRackQuietAssetsLogger#call'
config/initializers/100-silence_logger.rb:29:in 'SilenceLogger#call'
actionpack (8.0.5.1) lib
그리고
메시지 (209개 복사본 보고됨)
Job exception: ERROR: invalid input syntax for type inet: "unix:"
LINE 2: SET ip_address = 'unix:'
^
Backtrace
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:109:in 'PG::Connection#exec'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/patches/db/pg/alias_method.rb:109:in 'PG::Connection#async_exec'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:217:in 'MiniSql::Postgres::Connection#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in 'block in MiniSql::ActiveRecordPostgres::Connection#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in 'block in MiniSql::ActiveRecordPostgres::Connection#with_lock'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/activesupport-8.0.5.1/lib/active_support/concurrency/null_lock.rb:9:in 'ActiveSupport::Concurrency::NullLock#synchronize'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in 'MiniSql::ActiveRecordPostgres::Connection#with_lock'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in 'MiniSql::ActiveRecordPostgres::Connection#run'
/var/www/discourse/lib/mini_sql_multisite_connection.rb:109:in 'MiniSqlMultisiteConnection#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:196:in 'MiniSql::Postgres::Connection#exec'
/var/www/discourse/app/models/user.rb:1142:in 'User.update_ip_address!'
/var/www/discourse/lib/auth/default_current_user_provider.rb:235:in 'block in Auth::DefaultCurrentUserProvider#current_user'
/var/www/discourse/lib/scheduler/defer.rb:135:in 'block in Scheduler::Deferrable#do_work'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-9.0.0/lib/rails_multisite/connection_management/null_instance.rb:54:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-9.0.0/lib/rails_multisite/connection_management.rb:23:in 'RailsMultisite::ConnectionManagement.with_connection'
/var/www/discourse/lib/scheduler/defer.rb:130:in 'Scheduler::Deferrable#do_work'
/var/www/discourse/lib/scheduler/defer.rb:116:in 'block (2 levels) in Scheduler::Deferrable#start_thread'
어떤 프록시를 운영하고 계신가요? 아키텍처를 설명해 주실 수 있나요?
“unix:” 문자열을 ip_address 필드에 전달하려는 것처럼 보입니다.
이것은 Discourse의 상위 레벨에서 설정이 잘못되었을 수 있습니다.
Caddy와 관련된 유사한 문제가 보고되었고, 여기에서 해결되었습니다:
@Falco @satonotdead
드디어 문제를 해결했습니다. 정말로 고쳐졌는지 확인하기 위해 꽤 오랜 시간을 기다렸고, 이제 정상적으로 작동하는 것 같습니다.
구성 (Setup)
Discourse는 Docker에서 실행되며 nginx를 Unix 소켓(/var/discourse/shared/standalone/nginx.http.sock)으로 노출합니다. Caddy는 그 앞에 리버스 프록시로 위치하며 X-Real-IP 헤더를 통해 클라이언트의 실제 IP를 전달합니다.
변경해야 할 두 가지가 있었습니다: 컨테이너 내부의 nginx 설정과 재빌드(rebuild) 실행 방식입니다.
1. app.yml
## Plugins go here
## see https://meta.discourse.org/t/19157 for details
hooks:
# This after_code block is just my own plugin list — it has nothing to do wi…
도와주셔서 정말 감사합니다!
제가 정확히 이 구성을 사용하고 있습니다:
In this post, I will show you exactly how to run discourse behind a nginx reverse proxy. While still using the supported installation methods.
Requirements:
Valid domain name.
Valid ssl certificate.
Valid DNS entries pointing to the domain name.
Valid working email server or smtp provider.
Working Nginx Reverse Proxy and ability to reach the instance and create the SSL cert for later use.
VM or LxC container that can run docker.
For this guide I will be using my own instance as an example, w…
… 다만 “proxy_set_header X-Real-IP $remote_addr;” 항목이 빠져 있었습니다.
그래서 이것이 관련이 있을 것 같습니다.
지금은 잘 작동하는 것 같습니다. 더 많은 테스트를 수행한 후, 이것이 문제를 해결했는지 내일 보고하겠습니다.
감사합니다!