新規インストール用の web_only イメージを作成できません

こんにちは :blush:

Discourse と連携するパイプラインの構築をまだ試みています。
Discourse と共に使用するための、新しい Redis コンテナと新しい Postgres コンテナを用意しました。
次のステップは、ウェブ専用コンテナのイメージをビルドし、それらを接続してインストールを開始することだと理解していますが、コンテナのブートストラップがうまくいきません。

以下のエラーが発生しています:

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 4632 exit 1>
Location of failure: /pups/lib/pups/exec_command.rb:112:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
0e576a9672a887d23579100756224f920ab595b819874b5e7cbe4868f4234481
** FAILED TO BOOTSTRAP ** 上記をスクロールして、より早い段階のエラーメッセージを確認してください。複数のエラーがある可能性があります。
./discourse-doctor で問題を診断できるかもしれません。

まだ何も構築されていないのに、なぜマイグレーションを試みているのか理解できません。手順を間違えているのでしょうか?
使用している web_only.yml は以下の通りです(非常に基本的なものです):

templates:
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
env:
  LANG: en_US.UTF-8
  UNICORN_WORKERS: 2
  DISCOURSE_DB_USERNAME: root
  DISCOURSE_DB_PASSWORD: my-secret-pw
  DISCOURSE_DB_HOST: 127.0.0.1
  DISCOURSE_DB_NAME: communities
  DISCOURSE_DEVELOPER_EMAILS: 'email@mail.com'
  DISCOURSE_HOSTNAME: 'localhost'
  DISCOURSE_REDIS_HOST: 127.0.0.1
  SKIP_POST_DEPLOYMENT_MIGRATIONS: 1
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - mkdir -p plugins
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-voting.git
          - git clone https://github.com/discourse/discourse-slack-official.git
          - git clone https://github.com/discourse/discourse-assign.git
run:
  - exec:
      cd: /var/www/discourse
      cmd:
        - sed -i 's/GlobalSetting.serve_static_assets/true/' config/environments/production.rb
        - bash -c "touch -a /shared/log/rails/{sidekiq,puma.err,puma}.log"
        - bash -c "ln -s /shared/log/rails/{sidekiq,puma.err,puma}.log log/"
        - sed -i 's/default \$scheme;/default https;/' /etc/nginx/conf.d/discourse.conf

ブートストラップを実行するたびに、Postgres と Redis コンテナを起動・実行しておく必要があるのでしょうか?イメージを自分で準備してアップロードし、その後それらを使用して環境を再実行すれば、データベースに対して何らかの操作を行う必要はない我以为いました…

私が構築するように指示されたパイプラインは以下の通りです:

  • GitHub Actions:更新が必要な場合にイメージをブートストラップできます。
    • イメージをプライベートレジストリにプッシュします。
  • その後、Kubernetes クラスターが更新を取得し、開発環境から本番環境までデプロイします。

これまでのご支援とサポートに改めて感謝いたします。:sparkles:

問題はおそらく、コンテナ内で 127 が機能しない点にあると思います。ブートストラップ処理ではデータベースのマイグレーションが行われます。データベースをマイグレーションしたくない場合は、テンプレートを変更するか、スクラッチデータベースを使用する必要があります。

「いいね!」 2

返信ありがとうございます :slight_smile:
データベースマイグレーションを回避またはスキップする方法を教えてください。SKIP_POST_DEPLOYMENT_MIGRATIONS: 1 でできると思っていたのですが。

できません。マイグレーション後に破棄するスクラッチデータベースの作成をお勧めします。

そして、その際、新しいイメージをデプロイする際にそれらすべての処理が実行されることを確認してください。

問題は、初回インストール用の最初のイメージを作成しているのに、移行すべきものがないのに、なぜデータベースのマイグレーションが発生しているのかが理解できないことです:frowning:

「いいね!」 1

マイグレーションは、Rails の文脈で使われる技術用語です。マイグレーションは基本的に、データベースの正しい構造を作成するものです。

「いいね!」 2

Discourse は、必要なテーブルとデータでデータベースが初期化されていない限り動作しません。また、アセットの事前コンパイルも必要です。他の方法でデプロイしようとする場合は、それらの仕組みを理解しておく必要があります。

「いいね!」 1

ご説明いただき、ありがとうございます。最初のフォーラムリリース時に、最初のデータベース構造を作成できるものだと思っていました。

返信ありがとうございます。引き続き検討してみます。私が求めているようなパイプラインの構築は、おそらく不可能なようです :frowning:

可能です。ただし、明示的にそのようにする必要があります。イメージを構築する最も簡単な方法は、スクラッチデータベースをマイグレーションさせることです。

「いいね!」 1

GitHub パイプライン中に一時的な Postgres DB の使用をチームに提案するように説得してみます。これまでのご支援、本当にありがとうございます。

「いいね!」 1