Ошибка при попытке редактирования поста с изображением в (NginX Proxy Manager?)

При попытке сохранить пост после его редактирования в версии 2.9.0.beta4 возникает ошибка. Ошибка 500, и судя по всему, черновик не сохраняется. Ранее в этой версии я сталкивался с ошибками, связанными с правами владения файлами. Не могли бы вы подсказать путь, где хранятся как посты, так и черновики, чтобы я мог проверить права владения и настройки защиты?

Кажется, это слишком простой ответ, поэтому извините, если я ошибся, но если вы используете Discourse Data Explorer, то посты находятся в таблице posts, а черновики — в таблице drafts.

Есть ли ошибка в консоли вашего браузера, которая могла бы добавить дополнительные детали о том, что не работает?

Я не использую плагин Explorer. Похоже, это происходит при редактировании документов с встроенной графикой. Возможно, защита папки, в которой они хранятся, настроена неправильно? Вы знаете, где она находится?

Как отметил @JammyDodger, подавляющее большинство данных Discourse хранится в базе данных PostgreSQL, поэтому маловероятно, что у вас возникнут проблемы с «владением файлами» в этом месте — они затрагивают лишь некоторые функции Discourse.

При стандартной установке загруженные файлы хранятся в директории /var/discourse/shared/standalone/.... Эта директория затем монтируется внутри контейнера Docker. Возможно, там возникла проблема с правами доступа :+1:

Чтобы убедиться в этом, причина ошибок 500 должна быть отражена в журналах ошибок вашего сайта. Войдите в систему как администратор, перейдите по адресу /logs и найдите недавние красные ошибки.

У меня стандартная установка, выполненная с сайта. Внутри контейнера в /var нет ./discourse. Зато там есть ./www. При этом /var/www/discourse существует. Всё внутри него принадлежит пользователю discourse, и там отсутствуют папки shared или standalone.

Снаружи контейнера есть папка /var/discourse/shared/standalone. Поскольку это установка Docker, вне контейнера Docker отсутствует.

^^ что-нибудь видно в журналах ошибок?

У меня нет /logs. Существует папка /var/discourse/shared/standalone/log/var-log и папка /var/log. Обе эти папки содержат множество файлов .gz.

При входе в систему как администратор вы сможете перейти по адресу https://{ваш форум}/logs в браузере.

Спасибо! Я об этом не знал. Я только что вызвал ошибку 500 при редактировании поста и посмотрел в лог:


Ошибка возникает в ту же секунду, когда я нажимаю «Сохранить».

Можете скопировать и вставить содержимое вкладок «info» и «backtrace»? (Самая полезная часть backtrace находится вверху, но на скриншоте она обрезана)

Вот вкладка «Информация» сразу после того, как я вызвал ошибку 500, отредактировав любой существующий пост.

Привет, @vmsman :slightly_smiling_face: Как у вас дела?

Если есть возможность, пожалуйста, скопируйте и вставьте полный вывод ‘info’ и ‘backtrace’ в виде блока кода здесь на Meta, чтобы мы могли увидеть все важные детали.

Вот пример другой ошибки с моего тестового сайта:

Сообщение (35 копий)

Не удалось подготовить текст: JavaScript был прерван (либо из-за тайм-аута, либо явно)

Backtrace

lib/discourse.rb:772:in `rescue in after_fork'
lib/discourse.rb:768:in `after_fork'
/var/www/discourse/lib/demon/base.rb:217:in `establish_app'
/var/www/discourse/lib/demon/base.rb:147:in `block in run'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.7/lib/active_support/fork_tracker.rb:10:in `block in fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.7/lib/active_support/fork_tracker.rb:8:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.7/lib/active_support/fork_tracker.rb:8:in `fork'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-6.1.4.7/lib/active_support/fork_tracker.rb:27:in `fork'
/var/www/discourse/lib/demon/base.rb:144:in `run'
/var/www/discourse/lib/demon/base.rb:140:in `start'

Я обнаружил нечто существенное. Когда я редактирую существующий пост, появляется красное сообщение о том, что черновики недоступны.

Надеюсь, это именно то, что вам нужно. Ошибка 500, по-видимому, генерирует сообщение #<Net::OpenTimeout: execution expired>

/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `initialize'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `open'
/usr/local/lib/ruby/2.7.0/net/http.rb:960:in `block in connect'
/usr/local/lib/ruby/2.7.0/timeout.rb:105:in `timeout'
/usr/local/lib/ruby/2.7.0/net/http.rb:958:in `connect'
/usr/local/lib/ruby/2.7.0/net/http.rb:943:in `do_start'
/usr/local/lib/ruby/2.7.0/net/http.rb:932:in `start'
/usr/local/lib/ruby/2.7.0/net/http.rb:606:in `start'
/var/www/discourse/lib/final_destination.rb:515:in `safe_session'
/var/www/discourse/lib/final_destination.rb:455:in `safe_get'
/var/www/discourse/lib/final_destination.rb:147:in `get'
/var/www/discourse/lib/retrieve_title.rb:63:in `fetch_title'
/var/www/discourse/lib/retrieve_title.rb:7:in `crawl'
/var/www/discourse/app/jobs/regular/crawl_topic_link.rb:39:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.4.1/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.4.1/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.4.1/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.4.1/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.4.1/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_retry.rb:114:in `local'
sidekiq-6.4.1/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq.rb:40:in `block in <module:Sidekiq>'
sidekiq-6.4.1/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.4.1/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.4.1/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_retry.rb:81:in `global'
sidekiq-6.4.1/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.4.1/lib/sidekiq/job_logger.rb:39:in `prepare'
sidekiq-6.4.1/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.4.1/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.4.1/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.4.1/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.4.1/lib/sidekiq/util.rb:56:in `watchdog'
sidekiq-6.4.1/lib/sidekiq/util.rb:65:in `block in safe_thread'

Также я наблюдаю ошибку ActionView::Template::Error (неопределённый метод stylesheet_path для #Stylesheet::Manager::Builder:0x00007f27b6c2f850 Возможно, вы имели в виду: stylesheet_relpath, stylesheet_fullpath) lib/stylesh

lib/stylesheet/manager.rb:246:in `block in stylesheet_details'
lib/stylesheet/manager.rb:215:in `synchronize'
lib/stylesheet/manager.rb:215:in `stylesheet_details'
lib/stylesheet/manager.rb:192:in `stylesheet_link_tag'
app/helpers/application_helper.rb:565:in `discourse_stylesheet_link_tag'
app/views/layouts/crawler.html.erb:11
actionview (6.1.4.1) lib/action_view/base.rb:247:in `public_send'
actionview (6.1.4.1) lib/action_view/base.rb:247:in `_run'
actionview (6.1.4.1) lib/action_view/template.rb:154:in `block in render'
activesupport (6.1.4.1) lib/active_support/notifications.rb:205:in `instrument'
actionview (6.1.4.1) lib/action_view/template.rb:345:in `instrument_render_template'
actionview (6.1.4.1) lib/action_view/template.rb:152:in `render'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionview (6.1.4.1) lib/action_view/renderer/template_renderer.rb:72:in `block in render_with_layout'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionview (6.1.4.1) lib/action_view/renderer/template_renderer.rb:70:in `render_with_layout'
actionview (6.1.4.1) lib/action_view/renderer/template_renderer.rb:55:in `render_template'
actionview (6.1.4.1) lib/action_view/renderer/template_renderer.rb:11:in `render'
actionview (6.1.4.1) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
actionview (6.1.4.1) lib/action_view/renderer/renderer.rb:29:in `render_to_object'
actionview (6.1.4.1) lib/action_view/rendering.rb:117:in `block in _render_template'
actionview (6.1.4.1) lib/action_view/base.rb:273:in `in_rendering_context'
actionview (6.1.4.1) lib/action_view/rendering.rb:116:in `_render_template'
actionpack (6.1.4.1) lib/action_controller/metal/streaming.rb:218:in `_render_template'
actionview (6.1.4.1) lib/action_view/rendering.rb:103:in `render_to_body'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
actionpack (6.1.4.1) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack (6.1.4.1) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:46:in `block (2 levels) in render'
/usr/local/lib/ruby/2.7.0/benchmark.rb:308:in `realtime'
activesupport (6.1.4.1) lib/active_support/core_ext/benchmark.rb:14:in `ms'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:46:in `block in render'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:86:in `cleanup_view_runtime'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:45:in `render'
lib/topic_list_responder.rb:13:in `block (2 levels) in respond_with_list'
actionpack (6.1.4.1) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:103:in `block (2 levels) in <class:ListController>'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.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.9.1) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:387:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
actionpack (6.1.4.1) lib/action_dispatch/routing/mapper.rb:49:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.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.4.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:354: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.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (2.3.3) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.0.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:198:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) 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'

Оказывается, я не заметил, но, похоже, сейчас я не могу загружать изображения. Любая попытка загрузить изображение в новом посте приводит к сообщению: «Извините, произошла ошибка при загрузке файла. Пожалуйста, попробуйте снова». Таким образом, я не могу редактировать и сохранять что-либо в старом посте без ошибки 500, и не могу создать новый пост, если он не состоит только из текста. При этом я могу создавать и удалять посты, содержащие только текст. Похоже, мы сузили круг проблем до какой-то ошибки, связанной с любыми постами, содержащими графику, как новыми, так и старыми. В этих тестах я являюсь пользователем-администратором.

В общем, в полном отчаянии я решил попробовать пересобрать систему. Первые ошибки, которые я увидел:

I, [2022-04-29T00:19:51.497560 #1]  INFO -- : > cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'
warning Skipping preferred cache folder "/home/discourse/.cache/yarn" because it is not writable.
warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".
warning Cannot find a suitable global folder. Tried these: "/usr/local, /home/discourse/.yarn"
warning Skipping preferred cache folder "/home/discourse/.cache/yarn" because it is not writable.
warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".

Эти ошибки интересны, потому что я установил права 777 для /home/discourse, но всё равно получаю их.
Других ошибок нет до самого конца:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake themes:update assets:precompile' failed with return #<Process::Status: pid 716 exit 1>
Location of failure: /usr/local/lib/ruby/gems/2.7.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"assets_precompile", "cmd"=>["su discourse -c 'bundle exec rake themes:update assets:precompile'"]}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.
451d4b5ee8d036df6ab8f7717019d94b66d10d261c3d1201547dad7a1722a544
==================== END REBUILD LOG ====================
Failed to rebuild app.

В любом случае, после запуска ./discourse-doctor я снова мог публиковать сообщения с графикой и редактировать их, пока не перезагрузил систему. Теперь те же ошибки вернулись.

Я думаю, возможно, нам стоит рассмотреть это с самого начала:

  • Является ли это стандартной установкой?
  • Установлены ли у вас какие-либо плагины или пользовательские темы?
  • При пересборке какие ошибки отображаются в выводе (например, в конце, когда система просит прокрутить вверх для получения более конкретных ошибок, какие ошибки вы видите? Можете ли вы скопировать весь вывод в блок кода здесь, чтобы мы могли его увидеть)?
  • Какие изменения предложил или внедрил discourse-doctor, и какие действия вы предприняли для «перезапуска» вашего экземпляра, из-за которых эти изменения перестали работать?

Это стандартная установка. Она работает уже около двух лет.
Я не использую плагины или пользовательские темы.
Я скопировал все ошибки, которые возникают при пересборке.
Первые ошибки выглядят так:

I, [2022-04-29T00:19:51.497560 #1]  INFO -- : > cd /var/www/discourse && [ ! -d 'node_modules' ] || su discourse -c 'yarn install --production && yarn cache clean'
warning Skipping preferred cache folder "/home/discourse/.cache/yarn" because it is not writable.
warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".
warning Cannot find a suitable global folder. Tried these: "/usr/local, /home/discourse/.yarn"
warning Skipping preferred cache folder "/home/discourse/.cache/yarn" because it is not writable.
warning Selected the next writable cache folder in the list, will be "/tmp/.yarn-cache-1000".

Утилита discourse-doctor не предлагает никаких изменений и, похоже, работает нормально.

Я точно не знаю, когда начались ошибки 500, но они появились примерно в то же время, когда я перестал сохранять черновики или сообщения с изображениями. Зайдите на мой форум по адресу https://discussion.scottibyte.com, чтобы увидеть это своими глазами. В сообщениях выше я привёл абсолютно ВСЕ ошибки, которые я увидел во время пересборки и работы утилиты discourse-doctor.

Могу сказать, что после запуска команды:

./discourse-setup rebuild

экземпляр не запускается, как видно выше. Если сразу после этого запустить:

./discourse-doctor

экземпляр каким-то образом запускается, но ошибки остаются теми же.
Мне нравится этот продукт, но он, кажется, полон случайных ошибок каждые несколько месяцев, которые трудно исправить. Моя установка абсолютно стандартная, без каких-либо изменений, и она просто ломается без видимых причин.

Ваш диск переполнен? Хотя, думаю, вы бы получили предупреждение.

Я вернусь в сеть позже, но просто чтобы быстро проверить: это опечатка?

Команда должна быть такой:

./launcher rebuild app

Нет, это не опечатка. Похоже, я использую неправильную команду. Я сейчас пробую.