Я работаю в gitpod.io — бесплатной IDE с одним кликом для GitHub. В настоящее время мы используем Spectrum для нашего сообщества, но у нас возникли с ним некоторые проблемы, и мы хотели бы развернуть экземпляр Discourse, чтобы протестировать его и, возможно, мигрировать.
Если возможно, мы хотели бы использовать наш аккаунт Google Cloud для этой цели. Не могли бы вы подсказать, в каком направлении двигаться? Например, подходит ли новый Google Cloud Run для запуска экземпляра Discourse?
Кроме того, поскольку наша миссия — полностью автоматизировать все настройки для разработчиков (по крайней мере, для проектов с открытым исходным кодом), я хотел бы создать полностью автоматизированный сценарий настройки для Discourse. Это позволит участникам в один клик запустить готовую к работе среду Discourse онлайн (вместо того чтобы читать длинные списки инструкций по настройке и вручную устанавливать/настраивать множество зависимостей на своём устройстве). Я уже начал работу над этим, основываясь на отличном автоматизированном сценарии настройки Discourse от @notriddle для Janitor (привет!).
Однако сейчас я столкнулся с проблемой: недавно инструкции по настройке перестали работать из-за отсутствия таблицы «polls». Пока не уверен, как это исправить, но продолжу расследование. Решил просто упомянуть об этом здесь.
Может быть, но это не так просто. Discourse не является stateless-контейнером, а именно для таких контейнеров создан Google Cloud Run. Поэтому вам понадобится способ добавить какой-либо постоянный том (Persistent Volume) для данных, которые хранятся в Discourse (загрузки, аватары, база данных).
Я бы использовал обычный экземпляр Google Compute, и всё. С помощью какого-либо скрипта или инструментов управления инфраструктурой вы сможете автоматизировать развёртывание новых экземпляров Discourse. Также вам может помочь это руководство: Install Discourse on Ubuntu or Debian for Development.
Какие именно инструкции по настройке вы используете? Если таблица «polls» отсутствует, это означает, что миграции плагинов не были выполнены. В режиме разработки они должны запускаться автоматически. В тестовом режиме вам нужно добавить LOAD_PLUGINS=1 перед командой rake db:migrate.
Это звучит более разумно, чем использование Cloud Run, так как извлечение всего состояния из контейнеров Discourse может занять некоторое время. Спасибо за ссылку на руководство! Я попробую следовать ему, чтобы настроить экземпляр Compute, и сообщу здесь о результатах.
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
Огромное спасибо за подсказку! Я попробую это сделать и также сообщу здесь. (Извините, что задал два вопроса в одном! Надеюсь, это не сделает обсуждение слишком запутанным.)
Установка для разработчиков гораздо медленнее и предназначена для… разработки. Поэтому вам стоит следовать инструкциям по стандартной установке. Её вполне легко автоматизировать. Мой сервис установки теперь полностью автоматизирован (за исключением настроек DNS, требуемых Mailgun, так как у меня нет контроля над DNS клиента).
Самая сложная часть установки — это настройка почты.
Кроме того, установка и обслуживание — это разные вещи.
Спасибо, @pfaffman! Извините за путаницу: в моём первоначальном сообщении я перепутал два момента: 1) установку Discourse для сообщества Gitpod и 2) автоматизацию настройки окружения для разработчиков и контрибьюторов Discourse. К счастью, я следую руководству для разработчиков именно для пункта 2), а не для 1).
== Seed from /workspace/discourse/db/fixtures/990_settings.rb
Discourse hostname: localhost is not a valid domain for emails!
== Seed from /workspace/discourse/db/fixtures/990_topics.rb
rake aborted!
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
LINE 8: WHERE a.attrelid = '"polls"'::regclass
^
Правильно ли я понял ваше предложение? Есть ли у вас другие идеи, как это исправить? (Я пытался предварительно удалить таблицы, но это привело к другой ошибке, которую я уже не помню. Хотя готов попробовать снова.)
К сведению: вы можете легко воспроизвести ошибку, попробовав открыть мой форк Discourse в Gitpod: Dashboard. Вы увидите, что автоматизированная настройка завершится ошибкой, и получите интерактивную среду, где можно будет выполнять различные команды Discourse в терминале.
В отличие от сообщения коммита, я считаю, что миграции плагинов работали до этого коммита. Теперь они не работают. Неважно, передан ли LOAD_PLUGINS=1 или нет — миграции плагинов не выполняются в моей среде разработки.
Кажется, я нашел проблему для ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "polls" does not exist
Когда load_config выполняется при создании базы данных, он перезаписывает migrations_paths.
Я начал отладку кода, отвечающего за заполнение тестовой базы данных, но запутался. По каким-то причинам после загрузки схемы при вызове db:migrate Rails всё ещё пытается выполнить миграции, и возникает ошибка о том, что таблица уже существует. Пока мне не удалось найти причину.
Огромное спасибо за проверку этой ошибки! Пока я буду использовать обновлённые инструкции, чтобы обойти её.
Ага, интересно, спасибо! Я посмотрю на существующие Dockerfile для разработки, чтобы узнать, можно ли их просто запускать в один клик через Gitpod. Это было бы здорово.
(Но теперь команда DISCOURSE_DEV_HOST=.gitpod.io bundle exec rails s -b 0.0.0.0 начинает зацикливаться с ошибкой:
/workspace/.rvm/gems/activesupport-6.0.0/lib/active_support/dependencies.rb:551:in `load_missing_constant': Unable to autoload constant Version, expected /workspace/discourse/lib/version.rb to define it (LoadError)
и веб-сервер снова блокирует URL предпросмотра Gitpod:
Привет, Ян! Если у тебя есть время, мне интересно узнать, какие именно проблемы возникли с Spectrum или что не сработало так, как ты надеялся?
Я немного слежу за развитием Spectrum, время от времени читаю о нём.
(Я пытался отправить тебе личное сообщение об этом, но, по какой-то причине, когда я нажимаю на твой профиль, кнопки «Отправить личное сообщение» нет.)