Я создаю новый экземпляр Discourse с нуля в целях разработки и снова вижу ошибку загрузки:
FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1002 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
Настройка контейнеров включает два контейнера: webonly и dataonly (redis), а также внешнюю базу данных PostgreSQL. Закомментирование настроек MaxMind ничего не меняет.
Есть ли какие-либо идеи, что можно сделать в данной ситуации?
Наиболее вероятная причина — нехватка памяти. В таком случае добавьте файл подкачки или перейдите на экземпляр с большим объёмом оперативной памяти. Попробуйте выполнить команду free -h.
OK, я исправил разделение web_only и redis. Сейчас сообщение об ошибке выглядит так:
FAILED -------------------- Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 981 e xit 1> Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn' exec failed with the params {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migra te'"]} 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. 801049b69a89d38b1ae5c299d356fc5f8dc6a8f518b1260c2dde05e0b6081556
Но возможно, это недопонимание или недостаток знаний с моей стороны:
База данных должна быть внешней, находиться в другом контейнере LXC с PostgreSQL. Пользователь базы данных и сама база существуют, но перед первой инициализацией (bootstrap) контейнера web_only база данных пуста. Скрипт сам создаёт базу данных на удалённой системе при первой сборке? Или мне сначала нужно создать контейнер базы данных, а затем вручную экспортировать его схему по умолчанию и данные во внешний демон PostgreSQL?
Спасибо за схему. Это довольно сложная настройка — так поступают только при наличии веской причины и хорошем знании местности.
Если вы всё ещё видите следующее, то это, скорее всего, указывает на проблему. Redis не может открыть порт, на котором ему нужно слушать запросы.
Так что вопросы следующие: должен ли Redis делать это в данном контейнере, и если да, то где ещё на машине запущен другой экземпляр Redis. Здесь может оказаться полезным инструмент lsof.
Привет, @Ed_S!
Спасибо за подсказку насчёт отсутствующего порта. Сначала я хочу дождаться ответа от Falco по моим вопросам относительно общей настройки Discourse с внешней базой данных PostgreSQL.
Да, настройка немного сложнее стандартной, где используется только один контейнер приложения. Я запускаю всё на выделенном root-сервере с Proxmox (https://proxmox.com) как средой виртуализации у hetzner.de.
Вам всё ещё нужно предоставить полные логи, включая часть, где произошла неудача миграции. Моё предположение (и это лишь предположение, так как вы не предоставили ошибку) заключается в том, что вы используете плагин AI, а в вашей базе данных отсутствует необходимый аддон.
Теперь я считаю, что лучшим подходом будет сначала создать стандартную настройку «всё в одном» (app.yml). Затем сделать дамп SQL начальной схемы и данных из контейнера во внешний сервер PostgreSQL. @Falco, что ты думаешь?