Должно быть d/rake admin:create, я полагаю…
К сожалению, нет ![]()
OCI runtime exec failed: exec failed: unable to start container process: exec: "bin/rake": stat bin/rake: no such file or directory: unknown
Каков был результат команды d/boot_dev --init?
Использование исходников в: /home/martyn/discourse
Использование данных в: /home/martyn/discourse/data/postgres
release: Загрузка из образа discourse/discourse_dev
Хэш-сумма: sha256:b64199f510bd9831af81ba8268bef3beff2abb45d0a264a0e29b35cfc3986f05
Статус: Образ discourse/discourse_dev:release уже актуален
docker.io/discourse/discourse_dev:release
docker: Ошибка ответа от демона: Конфликт. Имя контейнера "/discourse_dev" уже используется контейнером "44c83548a9a9060716aa7d4fd803e239227f48375625f1d27da19b3d4162c56a". Необходимо удалить (или переименовать) этот контейнер, чтобы иметь возможность использовать это имя повторно.
Смотрите 'docker run --help'.
OK, значит, вы собрали контейнер.
Это очень странно. Я только что установил всё с нуля в WSL, и у меня всё заработало, хотя мне пришлось вручную выполнить d/exec yarn.
Рекомендую остановить контейнер, удалить его и запустить заново, внимательно следя за ошибками, которые появляются в консоли.
Я работаю над настройкой окружения разработки Discourse по инструкциям для Docker, но при выполнении любых команд Yarn возникают ошибки. Команды Ruby работают нормально, но запуск d/yarn (и любых его подкоманд) завершается ошибкой:
discourse(v3.1.3) $ d/exec yarn -v
<--- Последние несколько GC --->
<--- Стек JS --->
#
# Фатальная ошибка OOM в JavaScript: выделение MemoryChunk не удалось при десериализации.
#
У меня Fedora 39 с Docker 24.0.7. Я не вносил никаких изменений, кроме как клонировал Discourse из Git и переключился на тег v3.1.3.
Кто-нибудь сталкивался с этой ошибкой ранее? Спасибо!
Похоже, что заканчивается память:
Сколько у него оперативной памяти?
В моей машине 64 ГБ оперативной памяти, и я не думаю, что устанавливал какие-либо ограничения на использование памяти Docker. У меня просто стандартная установка Docker.
Редактирование: интересно, команды Node работают, а Yarn не работает:
discourse(v3.1.3*) $ d/exec node -v
v18.17.1
discourse(v3.1.3*) $ d/exec yarn -v
<--- Последние несколько GC --->
<--- Стек JS --->
#
# Фатальная ошибка JavaScript OOM при выделении MemoryChunk не удалась во время десериализации.
#
Краткое обновление: при дальнейших тестах команды Node также не выполняются:
discourse(v3.1.3*) $ d/exec node --help
<--- Последние несколько GC --->
<--- Стек вызовов JS --->
#
# Фатальная ошибка переполнения памяти в JavaScript: выделение MemoryChunk не удалось во время десериализации.
#
Любая команда, кроме d/exec node -v, выдаёт эту ошибку.
Буду продолжать расследование и попробую найти решение.
Я нашел решение своей проблемы. Процесс немного запутанный и «костыльный», но он работает. Вкратце: обновление до Node.js 20.x.x устранило мою проблему.
Я создал образ Docker, использующий Node.js v20.x.x вместо стандартного v18.x.x, который применяется в образе разработки Discourse.
Для начала я создал этот Dockerfile:
# ИМЯ: discourse_node20
FROM discourse/discourse_dev:release
# обновление node до LTS 20.x.x
ENV NODE_MAJOR=20
RUN apt-get update
RUN apt-get install -y ca-certificates curl gnupg
RUN mkdir -p /etc/apt/keyrings
RUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
RUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
RUN apt-get update
RUN apt-get install nodejs -y
Затем я собрал образ: docker build -t discourse_node20 - < Dockerfile
После этого я обновил команду docker run в d/boot_dev, чтобы использовать образ discourse_node20 и не тянуть discourse/discourse_dev:release, так как он больше не нужен. Вот обновленная команда в d/boot_dev:
# закомментируйте строку ниже
# docker pull discourse/discourse_dev:release
docker run \
-d \
-p $local_publish:8025:8025 \
-p $local_publish:3000:3000 \
-p $local_publish:4200:4200 \
-p $local_publish:9292:9292 \
-p $local_publish:9405:9405 \
-v "$DATA_DIR:/shared/postgres_data:delegated" \
-v "$SOURCE_DIR:/src:delegated" \
-e UNICORN_BIND_ALL=true \
-e NODE_OPTIONS=--max_old_space_size=8192 \
$mount_plugin_symlinks \
$ENV_ARGS \
--hostname=discourse \
--name=discourse_dev \
--restart=always \
discourse_node20 /sbin/boot
После этого мне удалось успешно выполнить d/boot_dev --init, d/rails s и d/ember-cli, получив рабочую среду разработки в Docker 24 и Fedora 39.
Я не знаю, почему Node 20.x.x решает проблему. Надеюсь, это будет исправлено в основном образе разработки на стороне разработчиков. Я был бы рад внести вклад через pull request, но обновление основной зависимости кажется чем-то большим, чем просто случайный PR от меня.
Ну, по крайней мере, сейчас я не заблокирован!
У кого-то получилось запустить это на Raspberry Pi? (Да, я знаю, что конфигурация для продакшена поддерживается). Какие изменения или настройки нужны?
Я получаю:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
А затем контейнер просто падает и постоянно перезапускается.
ОБНОВЛЕНИЕ: А, я вижу, что поддерживающий образ ещё не добавлен? Сравните:
(который поддерживается)
с
Для последнего нет версии arm64…
Кто-нибудь на Mac OS (13.6.3) (Intel) успешно запустил Discourse в Docker и может поделиться, как обойти ошибку Error: Cannot find module 'esbuild'?
Я заметил, что в приложении boot_dev команда yarn никогда не выполняется для корневой директории, только для app/assets/javascripts/discourse:
echo "Yarn install..."
"${SCRIPTPATH}/exec" yarn install --cwd app/assets/javascripts/discourse
Поэтому логично, что esbuild не установлен, так как это зависимость, описанная в package.json корневой директории.
Однако этот package.json нельзя установить вне контейнера, так как будет установлена неправильная версия esbuild (для Mac, а не Linux… а контейнеру нужен Linux).
Разве в boot_dev не должна быть строка сразу над “installing gems”, выглядящая так?
echo "Installing top-level package.json ..."
"${SCRIPTPATH}/exec" yarn install
Когда я добавляю такую строку, мне удаётся пройти этап миграций без ошибки esbuild…
Это уже исправлено? Я установил и запустил, но на следующий день, когда я вернулся к этому и запустил d/boot_dev, получил это предупреждение, и контейнер больше не создается.
Разработка Discourse, скорее всего, не будет работать с использованием эмуляции архитектуры Docker.
Пожалуйста, попробуйте нативную установку для разработки.
Используем исходный код в: /Users/n_selvidge/discourse
Используем данные в: /Users/n_selvidge/discourse/data/postgres
Свяжитесь с провайдером прокси и убедитесь, что такие вызовы разрешены.
Получил ту же ошибку при запуске d/rails s,
/home/discourse/.bundle/gems/ruby/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/connection_adapters/postgresql_adapter.rb:87:in `rescue in new_client': connection to server at "10.169.51.142", port 5432 failed: Connection refused (ActiveRecord::ConnectionNotEstablished)
Is the server running on that host and accepting TCP/IP connections?
Буду благодарен за любую помощь!
d/rails s возвращает:
Ошибка ответа от демона: контейнер discourse_dev не найден.
Есть какие-либо предложения?
Вы сначала запустили d/boot_dev?
Да, я ввёл это, спасибо. Чтобы начать заново, я так понимаю, нужно удалить контейнер через графический интерфейс Docker, а также папку с репозиторием Discourse?


