Я использую Discourse уже несколько лет. Каждые полгода я настраиваю новый экземпляр. Моя конфигурация включает Docker и прокси на базе nginx, поэтому она, возможно, немного нестандартна. По этой причине я не использую discourse-setup.
Каждые полгода, когда я повторяю этот процесс, после того как я заново клонирую свежую копию Discourse из репозитория git и запускаю ./launcher bootstrap app, контейнер не запускается. В логе отображается:
anacron: Can't chdir to /var/spool/anacron: No such file or directory
run-parts: /etc/runit/1.d/anacron exited with return code 1
run-parts: executing /etc/runit/1.d/00-ensure-links
run-parts: executing /etc/runit/1.d/00-fix-var-logs
run-parts: executing /etc/runit/1.d/01-cleanup-web-pids
run-parts: executing /etc/runit/1.d/anacron
anacron: Can't chdir to /var/spool/anacron: No such file or directory
и так до бесконечности.
Обычно я выполняю множество шагов: перезапуск, удаление плагинов, их повторное добавление и так далее, пока в конце концов всё не заработает, так и не поняв, что именно помогло. Спустя полгода всё повторяется. Я работаю лишь над тем, чтобы исправить это, и непонятно, какой из множества выполненных шагов в итоге решил проблему.
Однако в этот раз, кажется, я наконец нашёл причину, и она вот в чём: apparently, ./launcher start app перезапускает старые экземпляры контейнеров с именем app, даже если Discourse был заново клонирован и перепересобран.
Отсутствующий шаг — docker remove app. Итоговый порядок действий:
./launcher stop app
docker remove app
... теперь заново клонируем, пересобираем и запускаем `./launcher start app`, и всё работает
Моя ошибка заключалась в том, что я ожидал, будто после выполнения ./launcher bootstrap app следующий ./launcher start app запустит новый образ контейнера, но, похоже, это не так. Естественно, всё идёт наперекосяк со старым контейнером, так как путь /var/discourse/shared был переинициализирован.
Я оставляю это здесь на случай, если кто-то ищет те же сообщения об ошибках в логах.
В качестве возможного улучшения было бы здорово, если бы контейнер обнаруживал изменения в своей директории /var/discourse/shared.