С моей виртуальной машины Ubuntu я смог выполнить ping rubygems.org. Не знаю, есть ли способ проверить, может ли это сделать контейнер Docker. Кажется, я пинговал только HTTP-версию, а не HTTPS. Упоминаю это на случай, если проблема связана с этим. (Одна из страниц, которую я нашел в Google, предлагала изменить https на http, но я не могу этого сделать, так как определенное поведение находится внутри контейнера Docker.)
Я пробовал варианты для macOS.
Сначала использовал вариант 2 — Homebrew. Однако возникли проблемы, так как не все зависимости были установлены с помощью команды из этого руководства. https://medium.com/@yutafujii_59175/a-complete-one-by-one-guide-to-install-docker-on-your-mac-os-using-homebrew-e818eb4cfc3 помогла мне продвинуться немного дальше.
Сейчас я застрял на Шаге 2 d/boot_dev --init:
Migrating database...
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
/src/lib/site_settings/db_provider.rb:61:in `table_exists?'
/src/lib/site_settings/db_provider.rb:16:in `all'
/src/lib/site_settings/defaults_provider.rb:29:in `db_all'
/src/lib/site_setting_extension.rb:277:in `block in refresh!'
/src/lib/site_setting_extension.rb:274:in `synchronize'
/src/lib/site_setting_extension.rb:274:in `refresh!'
/src/lib/site_setting_extension.rb:495:in `block in setup_methods'
/src/config/initializers/004-message_bus.rb:120:in `<main>'
/src/config/environment.rb:7:in `<main>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
Затем я загрузил файл .dmg, но, так как я новичок в Docker, не понимаю, что делать дальше. Было бы здорово получить более подробное описание варианта для macOS.
Спасибо.
В macOS после установки Docker через файл .dmg убедитесь, что он запущен — в панели инструментов macOS должен появиться значок, по которому можно проверить его статус. Затем просто следуйте инструкциям из первого сообщения (клонирование и т. д.). Если у вас возникнут проблемы при использовании этого подхода, напишите здесь.
Обратите внимание: если вы ранее устанавливали Docker через Homebrew, возможно, стоит сначала удалить эту версию или хотя бы убедиться, что она не запущена. Я сам не устанавливал Docker через Homebrew, поэтому не могу дать конкретных рекомендаций по этому поводу.
Спасибо.
Я нажал на иконку и открыл панель управления Docker. Там я не увидел запущенных контейнеров, хотя в командной строке их несколько запущено. Подскажите, нужно ли войти в систему, чтобы использовать панель управления Docker? Или такое поведение связано с тем, что у меня установлено несколько версий Docker: через Homebrew и Desktop (.dmg)?
Тем временем мне удалось настроить Discourse на DigitalOcean, и всё работает без проблем, что меня устраивает.
DMG устанавливает Docker, а не Discourse. Изначально контейнеры добавлены не будут.
Далее вы можете следовать руководству по Docker.
При выполнении вышеуказанной команды (на Mac) я получаю эту ошибку:
Произошла ошибка при установке cppjieba_rb (0.3.3), и Bundler не может продолжить.
Убедитесь, что `gem install cppjieba_rb -v '0.3.3' --source 'https://rubygems.org/'` выполняется успешно
перед запуском bundler.
Есть ли у вас какие-либо предложения? Я точно не понимаю, в чём проблема. Отдельная установка gem тоже не работает (даже с sudo).
Также, почему gems нужно устанавливать, когда я запускаю образ docker? Это должно было быть полностью предустановлено, верно?
ОБНОВЛЕНИЕ: ИСПРАВЛЕНО
Я клонировал репозиторий в
~/repos/discourse, но следовало в~/discourse. Теперь всё работает как по маслу.
Если при запуске d/unicorn вы получаете эту ошибку:
Could not find aws-partitions-1.284.0 in any of the sources
Run `bundle install` to install missing gems.
вы можете исправить это, выполнив:
docker exec -it -u discourse:discourse discourse_dev /bin/bash -c "cd /src && USER=discourse RUBY_GLOBAL_METHOD_CACHE_SIZE=131072 LD_PRELOAD=/usr/lib/libjemalloc.so RAILS_ENV=${RAILS_ENV:=development} bundle install"
после чего d/boot_dev запустится успешно.
Проще:
d/boot_dev
d/bundle install
У нас есть вспомогательные скрипты для всех стандартных задач.
В исходном сообщении сказано:
Рабочий процесс разработки Docker поддерживает символические ссылки в директории
plugins/
К чему в данном контексте следует создать символическую ссылку для директории плагинов? Спасибо!
cd plugins
ln -s /полный/путь/к/вашему/плагину .
ln -s ~/src/my-great-plugin # например
А, спасибо, просто имеется в виду создание символической ссылки на каталог плагинов в данном контексте.
Обычно для этого рабочего процесса не создают символическую ссылку на всю директорию, так как обычно требуется точный контроль над тем, какие плагины должны быть в области видимости во время выполнения.
Привет! Я использую это руководство, и всё работает отлично, но меня беспокоит, что при запуске d/boot_dev начинается загрузка различных файлов. Как можно скачать необходимые файлы один раз и сохранить их для последующих запусков? Моя ОС — Ubuntu 20.04.
Попытка установки на свежую систему Mint 20. Docker доступен:
terrapop@terrapop:/var$ docker version
Client: Docker Engine - Community
Version: 19.03.12
terrapop@terrapop:/var/discourse$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset>
Active: active (running) since Mon 2020-08-24 19:03:48 CEST; 31min ago
Затем клонировал Discourse:
sudo git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
cd /var/discourse
Однако выполнение d/boot_dev --init приводит к ошибке:
d/boot_dev --init
bash: d/boot_dev: Нет такого файла или каталога
Кто-нибудь может помочь?
Обновление: Я добавил ключи API SendGrid в файл app.yml, инициализировал приложение через ./launcher, и теперь оно работает на localhost. Возможно, все команды d/, упомянутые в исходном посте, устарели? Всё равно не понимаю. Приложение теперь работает в Docker на моём компьютере с Ubuntu (Mint) на localhost, как и на staging-сервере в Digital Ocean. Мы хотим разрабатывать на localhost, запустив приложение через Docker с символическими ссылками для плагинов, но не уверен, что всё готово, как должно быть, поскольку я не могу выполнить ни одну из команд d/. Кто-нибудь может помочь? Спасибо.
Обновление: Моя ошибка. Я использовал ссылку git для продакшена:
git clone GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub /var/discourse
Вместо:
git clone GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub
![]()
Однако…
Теперь столкнулся с новыми проблемами. Клонировать в /var можно только от суперпользователя/root на Ubuntu Mint 20 (UID 0). Поэтому, когда я клонирую и запускаю d/boot_dev --init, всё скачивается и запускается без проблем, но на более позднем этапе скрипт выдаёт ошибку прав доступа, так как ожидает выполнения действий от UID 1000 — это первый пользователь, созданный в Mint, то есть моя личная учётная запись (terrapop), а не root. Как обойти эту проблему?
Решение: Проще, чем я думал. Просто создайте новую папку www в /var. Измените владельца и права доступа к папке www на первого пользователя в Mint и продолжайте, как описано в постах из исходного сообщения. Теперь всё работает. Рад.
По какой-то причине символические ссылки на исходные директории моего плагина не работали, и мне пришлось вручную переместить / скопировать исходные директории плагинов в директорию plugins, чтобы они появились в /admin/plugins после перезапуска контейнера Docker.
Возможно, изменился способ поддержки символических ссылок в Docker? Я использую docker-ce 19.03.12 на Ubuntu.
Я тоже недавно столкнулся с этим в Docker Desktop для Mac.
Я выполнил те же шаги на droplet DigitalOcean за $5. Всё прошло успешно. Теперь как мне открыть доступ к моему сайту, чтобы я мог к нему подключиться?
P.S. Работает через ngrok. Пока не работает через обратный прокси nginx на порт 9292
Спасибо за это. Можно сделать это на сервере и избежать настройки обратного прокси nginx. Наслаждаюсь настройкой d/o docker + удалённый доступ через vscode ![]()
Используйте d/unicorn -D, чтобы запустить unicorn как демон, чтобы после запуска сервера терминал оставался доступным.
Также вам нужен droplet DigitalOcean минимум за $10.
Я использую Mac с zsh (в iTerm2), и при попытке использовать символическую ссылку для разработки плагинов я сталкиваюсь с этой ошибкой:
readlink: illegal option -- f
usage: readlink [-n] [file ...]
Это происходит потому, что реализация команды readlink на Mac немного отличается от версии GNU.
Самый простой способ решить эту проблему — выполнить следующие действия:
# brew install coreutils
# ln -s "$(which greadlink)" "$(dirname "$(which greadlink)")/readlink"
Это даст вам возможность использовать совместимую версию readlink.
Помните, что значение dirname "$(which greadlink)" должно находиться в вашем PATH перед /usr/bin (где обычно находится оригинальный readlink). В моём случае PATH выглядит примерно так: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:..., а символическая ссылка на greadlink находится в /usr/local/bin.
Ссылка: Fixing "readlink: illegal option -- f" error on a Mac
Чтобы запустить набор тестов для одного плагина, выполните следующее:
# d/rake "plugin:spec[PLUGIN_NAME]"