Ошибка подключения к Redis на localhost:6379 (Errno::EADDRNOTAVAIL)

После установки Discourse с использованием “Docker version 20.10.5, build 55c4c8” на CentOS 8 сайт запущен, но запросы DELETE к /draft.json всегда завершаются по тайм-ауту.

У меня запущен Apache, и я пробовал как обратный прокси через Apache, так и через HAProxy — поведение одинаковое.

Не знаю, связано ли это, но в файле unicorn.stdout.log я вижу множество подобных ошибок:

==> ./shared/standalone/log/rails/unicorn.stdout.log <==

2021-03-18T10:02:25.138Z pid=108 tid=ocs ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Starting up 1 supervised sidekiqs

Loading Sidekiq in process id 119

2021-03-18T10:40:09.682Z pid=119 tid=orn ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

2021-03-18T10:40:09.684Z pid=119 tid=ohf ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

2021-03-18T10:40:09.685Z pid=119 tid=owv ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

2021-03-18T10:40:09.683Z pid=119 tid=oob ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

2021-03-18T10:40:09.683Z pid=119 tid=omr ERROR: Error fetching job: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL)

Starting up 1 supervised sidekiqs

Loading Sidekiq in process id 121

Логирует ли Redis какие-либо ошибки в /var/discourse/shared/standalone/log/var-log/redis?

Это содержимое файла “current”:

53:M 18 Mar 2021 17:07:05.076 * 10 изменений за 300 секунд. Сохранение...
53:M 18 Mar 2021 17:07:05.076 * Фоновое сохранение запущено процессом 25018
25018:C 18 Mar 2021 17:07:05.126 * База данных сохранена на диск
25018:C 18 Mar 2021 17:07:05.127 * RDB: 2 МБ памяти использовано механизмом copy-on-write
53:M 18 Mar 2021 17:07:05.177 * Фоновое сохранение завершено успешно
53:M 18 Mar 2021 17:12:06.097 * 10 изменений за 300 секунд. Сохранение...
53:M 18 Mar 2021 17:12:06.098 * Фоновое сохранение запущено процессом 25337
25337:C 18 Mar 2021 17:12:06.145 * База данных сохранена на диск
25337:C 18 Mar 2021 17:12:06.145 * RDB: 2 МБ памяти использовано механизмом copy-on-write
53:M 18 Mar 2021 17:12:06.198 * Фоновое сохранение завершено успешно

Эти логи выглядят нормально. Вы всё ещё сталкиваетесь с проблемами при навигации по вашему экземпляру Discourse?

Я по-прежнему не могу удалять сообщения, приглашения и отменять изменения сообщений.

Кажется, проблема во всех вызовах метода HTTP DELETE. Могу ли я сказать, что Discourse использует POST вместо DELETE? Похоже на How can Discourse make POST instead of DELETE for "smart" CDN?, но я не использую CDN, только обычный виртуальный сервер с установкой Centos и Docker по инструкциям с сайта Discourse.

Часть лога Haproxy с ошибками 408 при HTTP DELETE. Что может «отбрасывать» запросы DELETE, @codinghorror? Если эти запросы DELETE доходят до haproxy, они должны также дойти до приложения внутри Docker. Может ли что-то там быть «виновным» в этой проблеме?

Mar 20 01:47:46 id22302.example.com haproxy[43043]: 176.243.177.232:61760 [20/Mar/2021:01:47:16.622] http-in discourse_socket/server3 0/0/0/30004/30034 408 71 - - CD-- 3/3/2/2/0 0/0 "DELETE /draft.json HTTP/1.1"

Mar 20 01:47:46 id22302.example.com haproxy[43043]: 176.243.177.232:61760 [20/Mar/2021:01:47:16.622] http-in discourse_socket/server3 0/0/0/30004/30034 408 71 - - CD-- 3/3/2/2/0 0/0 "DELETE /draft.json HTTP/1.1"

Mar 20 01:48:09 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:47:43.921] http-in discourse_socket/server3 0/0/0/25081/25081 200 396 - - ---- 2/2/1/1/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:48:09 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:47:43.921] http-in discourse_socket/server3 0/0/0/25081/25081 200 396 - - ---- 2/2/1/1/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:48:12 id22302.example.com haproxy[43043]: 176.243.177.232:61887 [20/Mar/2021:01:47:42.886] http-in discourse_socket/server3 0/0/0/30007/30037 408 71 - - CD-- 2/2/1/1/0 0/0 "DELETE /draft.json HTTP/1.1"

Mar 20 01:48:12 id22302.example.com haproxy[43043]: 176.243.177.232:61887 [20/Mar/2021:01:47:42.886] http-in discourse_socket/server3 0/0/0/30007/30037 408 71 - - CD-- 2/2/1/1/0 0/0 "DELETE /draft.json HTTP/1.1"

Mar 20 01:48:25 id22302.example.com haproxy[43043]: 176.243.177.232:62083 [20/Mar/2021:01:48:25.863] http-in discourse_socket/server3 0/0/0/122/122 200 404 - - ---- 2/2/1/1/0 0/0 "POST /topics/timings HTTP/1.1"

Mar 20 01:48:25 id22302.example.com haproxy[43043]: 176.243.177.232:62083 [20/Mar/2021:01:48:25.863] http-in discourse_socket/server3 0/0/0/122/122 200 404 - - ---- 2/2/1/1/0 0/0 "POST /topics/timings HTTP/1.1"

Mar 20 01:48:34 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:48:09.193] http-in discourse_socket/server3 0/0/0/25044/25044 200 396 - - ---- 2/2/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:48:34 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:48:09.193] http-in discourse_socket/server3 0/0/0/25044/25044 200 396 - - ---- 2/2/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:48:59 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:48:34.487] http-in discourse_socket/server3 0/0/0/25087/25087 200 396 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:48:59 id22302.example.com haproxy[43043]: 176.243.177.232:61505 [20/Mar/2021:01:48:34.487] http-in discourse_socket/server3 0/0/0/25087/25087 200 396 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll HTTP/1.1"

Mar 20 01:49:35 id22302.example.com haproxy[43043]: 176.243.177.232:62413 [20/Mar/2021:01:49:35.637] http-in discourse_socket/server3 0/0/0/87/87 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Mar 20 01:49:35 id22302.example.com haproxy[43043]: 176.243.177.232:62413 [20/Mar/2021:01:49:35.637] http-in discourse_socket/server3 0/0/0/87/87 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Mar 20 01:50:36 id22302.example.com haproxy[43043]: 176.243.177.232:62714 [20/Mar/2021:01:50:36.568] http-in discourse_socket/server3 0/0/0/81/81 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Mar 20 01:50:36 id22302.example.com haproxy[43043]: 176.243.177.232:62714 [20/Mar/2021:01:50:36.568] http-in discourse_socket/server3 0/0/0/81/81 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Mar 20 01:51:37 id22302.example.com haproxy[43043]: 176.243.177.232:62993 [20/Mar/2021:01:51:37.541] http-in discourse_socket/server3 0/0/0/78/78 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Mar 20 01:51:37 id22302.example.com haproxy[43043]: 176.243.177.232:62993 [20/Mar/2021:01:51:37.541] http-in discourse_socket/server3 0/0/0/78/78 200 417 - - ---- 1/1/0/0/0 0/0 "POST /message-bus/742b0b89384944a7b6376e2d6978889d/poll?dlp=t HTTP/1.1"

Это production.log. Я никогда не вижу запроса на удаление, но вижу регистрацию всего остального (открытие поста, изменение, сохранение и т.д.):

Завершено 200 OK за 81 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 14861)

Начат GET "/composer_messages?composer_action=edit&topic_id=10&post_id=13" для 176.243.226.205 в 2021-03-20 15:51:09 +0100

Обработка запроса контроллером ComposerMessagesController#index в формате JSON

Параметры: {"composer_action"=>"edit", "topic_id"=>"10", "post_id"=>"13"}

Завершено 200 OK за 1191 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 16940)

Начат POST "/presence/publish" для 176.243.226.205 в 2021-03-20 15:51:14 +0100

Обработка запроса контроллером Presence::PresencesController#handle_message в формате */*

Параметры: {"state"=>"editing", "topic_id"=>"10", "post_id"=>"13"}

Завершено 200 OK за 9 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 3192)

Начат PUT "/t/e-previsto-un-ritorno-di-freddo-nutro/10" для 176.243.226.205 в 2021-03-20 15:51:17 +0100

Обработка запроса контроллером TopicsController#update в формате */*

Параметры: {"title"=>"E' previsto un ritorno di freddo, nutro?", "category_id"=>1, "slug"=>"e-previsto-un-ritorno-di-freddo-nutro", "topic_id"=>"10", "topic"=>{"title"=>"E' previsto un ritorno di freddo, nutro?", "category_id"=>1}}

Завершено 200 OK за 19 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 5149)

Начат POST "/presence/publish" для 176.243.226.205 в 2021-03-20 15:51:17 +0100

Обработка запроса контроллером Presence::PresencesController#handle_message в формате */*

Параметры: {"state"=>"closed", "topic_id"=>"10"}

Завершено 200 OK за 10 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 3159)

Начат PUT "/posts/13" для 176.243.226.205 в 2021-03-20 15:51:17 +0100

Обработка запроса контроллером PostsController#update в формате */*

Параметры: {"post"=>{"edit_reason"=>"", "cooked"=>"<p>post di test per vedere. ssss</p>", "raw"=>"post di test per vedere. ssss", "topic_id"=>"10", "raw_old"=>""}, "id"=>"13"}

Завершено 200 OK за 3296 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс | Allocations: 86638)

Начат GET "/t/10.json" для 176.243.226.205 в 2021-03-20 15:51:20 +0100

Обработка запроса контроллером TopicsController#show в формате JSON

Параметры: {"id"=>"10"}

Завершено 200 OK за 143 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс | Allocations: 52707)

Начат GET "/draft.json?draft_key=topic_10" для 176.243.226.205 в 2021-03-20 15:51:27 +0100

Обработка запроса контроллером DraftController#show в формате JSON

Параметры: {"draft_key"=>"topic_10"}

Завершено 200 OK за 38 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 4317)

Начат GET "/posts/13" для 176.243.226.205 в 2021-03-20 15:51:27 +0100

Обработка запроса контроллером PostsController#show в формате JSON

Параметры: {"id"=>"13"}

Завершено 200 OK за 16 мс (Views: 0.1 мс | ActiveRecord: 0.0 мс | Allocations: 5026)

Начат POST "/presence/publish" для 176.243.226.205 в 2021-03-20 15:51:29 +0100

Обработка запроса контроллером Presence::PresencesController#handle_message в формате */*

Параметры: {"state"=>"editing", "topic_id"=>"10", "post_id"=>"13"}

Завершено 200 OK за 20 мс (Views: 0.3 мс | ActiveRecord: 0.0 мс | Allocations: 3304)

Начат GET "/posts/13" для 176.243.226.205 в 2021-03-20 15:51:38 +0100

Обработка запроса контроллером PostsController#show в формате JSON

Параметры: {"id"=>"13"}

Завершено 200 OK за 121 мс (Views: 0.2 мс | ActiveRecord: 0.0 мс | Allocations: 56890)

Также в логе PUMA не отображаются запросы DELETE

2021-03-20 16:01:38 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:38 +0100] "GET /t/e-previsto-un-ritorno-di-freddo-nutro/10 HTTP/1.1" 200 - 1.0685

2021-03-20 16:01:39 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:39 +0100] "GET /uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_32x32.png HTTP/1.1" 200 11945 0.0119

2021-03-20 16:01:39 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021 16:01:39] "POST /message-bus/557c51e14e57450c8c76ab216af0a279/poll HTTP/1.1" HIJACKED -1 0.0956

2021-03-20 16:01:42 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:42 +0100] "POST /message-bus/557c51e14e57450c8c76ab216af0a279/poll HTTP/1.1" 200 - 0.0128

2021-03-20 16:01:43 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021 16:01:43] "POST /message-bus/557c51e14e57450c8c76ab216af0a279/poll HTTP/1.1" HIJACKED -1 0.0886

2021-03-20 16:01:54 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:54 +0100] "GET /t/e-previsto-un-ritorno-di-freddo-nutro/10 HTTP/1.1" 200 - 0.1436

2021-03-20 16:01:55 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:55 +0100] "GET /uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_32x32.png HTTP/1.1" 200 11945 0.0383

2021-03-20 16:01:56 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021 16:01:56] "POST /message-bus/1bddd2f9aaf54ec5a589bc74c9c8a409/poll HTTP/1.1" HIJACKED -1 0.0453

2021-03-20 16:01:59 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:01:59 +0100] "POST /message-bus/1bddd2f9aaf54ec5a589bc74c9c8a409/poll HTTP/1.1" 200 - 0.0129

2021-03-20 16:01:59 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021 16:01:59] "POST /message-bus/1bddd2f9aaf54ec5a589bc74c9c8a409/poll HTTP/1.1" HIJACKED -1 0.0096

2021-03-20 16:02:07 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:02:07 +0100] "GET /draft.json?draft_key=topic_10 HTTP/1.1" 200 - 0.0131

2021-03-20 16:02:08 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:02:08 +0100] "GET /posts/13 HTTP/1.1" 200 - 0.3559

2021-03-20 16:02:08 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:02:08 +0100] "GET /composer_messages?composer_action=edit&topic_id=10&post_id=13 HTTP/1.1" 200 - 0.2087

2021-03-20 16:02:12 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021:16:02:12 +0100] "POST /presence/publish HTTP/1.1" 200 - 0.0155

2021-03-20 16:02:24 +0100 : |Puma| 176.243.226.205 - - [20/Mar/2021 16:02:24] "POST /message-bus/1bddd2f9aaf54ec5a589bc74c9c8a409/" 200 - 0.0112

Это означает, что ваш обратный прокси настроен неверно и отбрасывает запросы, отличные от GET/POST. Это довольно распространённая проблема, и одна из причин, по которой мы поставляем контейнер с уже настроенным обратным прокси, чтобы пользователям не пришлось разбираться с этим вручную.

Если убрать HAProxy и позволить самому контейнеру слушать порты 80/443, проблема всё ещё сохраняется?

@Falco Только что попробовал, проблема всё ещё сохраняется. Может ли это быть сам Puma как веб-сервер, который отбрасывает DELETE-запросы?

Мы не используем Puma в продакшене, если вы устанавливаете его согласно официальной стандартной установке Discourse.

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

На всякий случай, у вас есть WAF какого-либо типа, стоящий перед этим доменом, @Andrea_Giovacchini?

Я попробовал альтернативную установку после того, как официальная версия дала ту же проблему.

Теперь я снова попробовал официальный метод установки (discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub), но он завершается ошибкой при выполнении команды “./launcher rebuild app” с следующим сообщением (два дня назад ошибка не возникала, но тоже была связана с проблемой DELETE):

Убедитесь, что команда `gem install libv8 -v '8.4.255.0' --source 'https://rubygems.org/'` выполняется успешно перед запуском bundler.

В файле Gemfile:
  mini_racer версии 0.3.1 зависит от
    libv8

/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer/parallel_installer.rb:220:in `handle_error'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer/parallel_installer.rb:102:in `call'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer/parallel_installer.rb:71:in `call'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer.rb:270:in `install_in_parallel'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer.rb:210:in `install'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer.rb:90:in `block in run'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/process_lock.rb:12:in `block in lock'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/process_lock.rb:9:in `open'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/process_lock.rb:9:in `lock'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer.rb:72:in `run'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/installer.rb:24:in `install'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli/install.rb:64:in `run'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:259:in `block in install'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/settings.rb:115:in `temporary'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:258:in `install'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:30:in `dispatch'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/cli.rb:24:in `start'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:49:in `block in <top (required)>'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/lib/bundler/friendly_errors.rb:130:in `with_friendly_errors'
  /usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.2.15/exe/bundle:37:in `<top (required)>'
  /usr/local/bin/bundle:23:in `load'
  /usr/local/bin/bundle:23:in `<main>'

I, [2021-03-20T23:42:40.998961 #1]  INFO -- : Завершение асинхронных процессов
I, [2021-03-20T23:42:40.998991 #1]  INFO -- : Отправка сигнала INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 66
I, [2021-03-20T23:42:40.999030 #1]  INFO -- : Отправка сигнала TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 183
2021-03-20 23:42:40.999 UTC [66] LOG:  получен запрос на быстрое завершение работы
183:signal-handler (1616283760) Получен сигнал SIGTERM, планирование завершения работы...
2021-03-20 23:42:41.013 UTC [66] LOG:  отмена активных транзакций
2021-03-20 23:42:41.014 UTC [66] LOG:  фоновый рабочий процесс "logical replication launcher" (PID 75) завершился с кодом выхода 1
2021-03-20 23:42:41.016 UTC [70] LOG:  завершение работы
183:M 20 Mar 2021 23:42:41.058 # Пользователь запросил завершение работы...
183:M 20 Mar 2021 23:42:41.058 * Сохранение финального снимка RDB перед выходом.
183:M 20 Mar 2021 23:42:41.061 * База данных сохранена на диск
183:M 20 Mar 2021 23:42:41.061 # Redis готов к выходу, пока...
2021-03-20 23:42:41.263 UTC [66] LOG:  система баз данных завершена


ОШИБКА
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test development' завершилась с кодом возврата #<Process::Status: pid 348 exit 5>
Место возникновения ошибки: /pups/lib/pups/exec_command.rb:112:in `spawn'
Ошибка выполнения с параметрами {"cd"=>"$home", "hook"=>"bundle_exec", "cmd"=>["su discourse -c 'bundle install --deployment --retry 3 --jobs 4 --verbose --without test development'"]}
9b0ca932a7dd52ccdd11e268910e3edcd8369c0c08f65e7f8686d542b9be473b
** НЕ УДАЛОСЬ ЗАПУСТИТЬ БУСТЕР ** пожалуйста, прокрутите вверх и поищите более ранние сообщения об ошибках, их может быть несколько.
./discourse-doctor может помочь диагностировать проблему.
➜  discourse git:(master) ✗

@Falco я попробовал официальный сценарий установки, но вместо ветки stable использовал tests-passed. Ошибки с мини-библиотекой mini_racer больше нет, но проблема с DELETE всё ещё сохраняется, как видно в видео: в логах nginx с tail и в браузере с открытой консолью.

POST-запросы сразу появляются в логах nginx, а DELETE — только после ошибки, что странно.

Вот запись экрана:
https://drive.google.com/file/d/1SEOdZjjVkQTpqT3ZQJ7SaR-Ib2mO6m4M/view?usp=sharing

Этот тест был выполнен по рекомендации: я запустил Discourse напрямую на порту 80, без промежуточного ПО, такого как HAPROXY.

Круто, я посмотрю и попробую воспроизвести это завтра, спасибо за отчет.

Да, версия «stable» к сожалению в данный момент неработоспособна из-за регрессии в bundler.

Мы займёмся исправлением в течение ближайших суток

@Falco, вы смогли воспроизвести проблему?

Привет @Andrea_Giovacchini,

Во-первых, здесь две разные проблемы:

  1. Заблокированные запросы DELETE.

  2. Сбойная пересборка для пользователей ветки «stable».

Проблема 2 была исправлена сегодня через https://meta.discourse.org/t/cant-rebuild-current-stable/183859/6?u=falco

Что касается проблемы 1, вот мои выводы:

У меня стоит свежая установка Discourse, и при отправке тестового запроса DELETE я получаю:

curl -X DELETE https://falcoland.falco.dev/draft.json
["BAD CSRF"]%                                                

Это ожидаемо, так как этот запрос должен сопровождаться валидным cookie для сессии пользователя.

Между тем, на вашем сайте:

curl -X DELETE http://apicolturaitalianawebinar.it/draft.json -v
*   Trying 213.229.86.117:80...
* Connected to apicolturaitalianawebinar.it (213.229.86.117) port 80 (#0)
> DELETE /draft.json HTTP/1.1
> Host: apicolturaitalianawebinar.it
> User-Agent: curl/7.75.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Mon, 22 Mar 2021 18:51:55 GMT
< Server: Apache/2.4.37 (centos) OpenSSL/1.1.1g Phusion_Passenger/6.0.4 mod_perl/2.0.11 Perl/v5.26.3
< X-Runtime: 0.001594
< X-Request-Id: ebe50251-0f06-4b71-acd0-887fb2666abb
< X-Powered-By: Phusion Passenger 6.0.4
< Content-Length: 1351
< Status: 404 Not Found
< Content-Type: text/html; charset=UTF-8
< 

Я получаю ошибку 404 от Phusion Passenger. Это выглядит не как стандартная установка Discourse :thinking:.

Я отключил Discourse, потому что из-за проблемы с удалением он был неработоспособен. Теперь по этому URL-адресу отвечает другое приложение.

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

@Falco Я снова загрузил это на http://discourse.apicolturaitalianafb.it/, и вы можете попробовать стандартную установку согласно документации здесь.

Команда curl выдаёт ошибку CSRF, и запрос сразу появляется во внутренних логах nginx в Discourse, но удаление через интерфейс не работает, а запись в логе появляется с задержкой около 35 секунд, как в видео, которое я отправил.

Если я указываю discourse.apicolturaitalianafb.it:8880 как имя хоста в app.yml, пересобираю и перехожу по адресу http://discourse.apicolturaitalianafb.it:8880, всё работает нормально, но я не могу использовать его таким образом.

Поскольку у меня уже запущен Apache с продакшн-сайтом, я попробовал разместить Discourse за HAProxy, как описано в документации на этом сайте, и удаление через Discourse перестало работать, хотя команда curl работает. Я также пробовал обратный прокси через Apache: curl работает, а удаление через Discourse — нет. Пробовал настроить Discourse на работу через unix-сокет и делать обратный прокси к нему, но проблема остаётся той же.

Для меня очевидно, что обратный прокси не «ломает» удаление, но какой-то JavaScript в Discourse по какой-то причине перестаёт корректно выполнять HTML-удаления.

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