web-dev-qa-db-ja.com

elasticbeanstalkデプロイメントプロセスのどこで移行を実行する必要がありますか?

人々がebアプリでdb migrateのようなコマンドをどのように実行するかについて非常に興味があります。 .ebextensionsとして追加した場合、1つのアプリに複数のインスタンスがある場合、複数のサーバーが同じ移行を実行しようとすると競合が発生する可能性があります。

展開プロセスのどの時点でdb migrateコマンドを実行する必要がありますか?

3
ThomasReggi

フラグを試すことができます:leader_onlyebextensions構成ファイル内。このフラグを使用すると、多くのインスタンスにアプリをデプロイしている場合でも、移行が一度だけ実行されます。たとえば、次のパスでプロジェクトのルートディレクトリにこのファイルを保存します:/.ebextensions/migration.config

option_settings:
container_commands:
    database_migration:
        leader_only: true
        command: "db migrate"

詳細: AWS Elastic Beanstalk公式ドキュメント

5
Tulio Faria

このシーケンスは、PostgreSQLを使用してRails 5.1.4をElasticBeanstalkにデプロイする際に機能します。

  1. コードをEBにデプロイします。私はEBコンソールを使用していますが、代わりにCLIを使用することもできます。
  2. EC2アプリサーバーへのSSH
  3. アプリディレクトリに移動します:cd/var/app/current /
  4. db:reset

ところで、RDSデータベースを調べるために使用していたpgAdminIIIを閉じる必要がありました。私が接続していたので、これはデータベースをロックし、最後のステップを防ぎます。

また、EBコンソール(設定>ソフトウェア)でRails_SKIP_MIGRATIONSをTRUEに設定しました。おそらく、これをデフォルト値のFALSEのままにすると、デプロイメントは必要な移行を実行します。

したがって、元の質問に答えて、アプリサーバーでRails db:reset(またはRails db:migrate)を実行します。 RDSサーバーにSSHで接続することはできません(できません)。

0
MSC