使用 Docker/Kubernetes 部署 Phoenix 应用程序时如何运行初始数据库迁移

问题描述 投票:0回答:1

我在尝试在内部 Kubernetes 基础设施中部署 Phoenix 应用程序时遇到问题。 特别是,我不确定如何运行初始数据库迁移。这是 Pod 上的日志。

04:41:47.447 [error] Could not create schema migrations table. This error usually happens due to the following:

  * The database does not exist
  * The "schema_migrations" table, which Ecto uses for managing
    migrations, was defined by another library
  * There is a deadlock while migrating (such as using concurrent
    indexes with a migration_lock)

To fix the first issue, run "mix ecto.create" for the desired MIX_ENV.

To address the second, you can run "mix ecto.drop" followed by
"mix ecto.create", both for the desired MIX_ENV. Alternatively you may
configure Ecto to use another table and/or repository for managing
migrations:

    config :acme, Acme.Repo,
      migration_source: "some_other_table_for_schema_migrations",
      migration_repo: AnotherRepoForSchemaMigrations

The full error report is shown below.

** (DBConnection.ConnectionError) connection not available and request was dropped from queue after 2993ms. This means requests are coming in and your connection pool cannot serve them fast enough. You can address this by:

  1. Ensuring your database is available and that you can connect to it
  2. Tracking down slow queries and making sure they are running fast enough
  3. Increasing the pool_size (although this increases resource consumption)
  4. Allowing requests to wait longer by increasing :queue_target and :queue_interval

See DBConnection.start_link/2 for more information

    (ecto_sql 3.11.1) lib/ecto/adapters/sql.ex:1054: Ecto.Adapters.SQL.raise_sql_call_error/1
    (elixir 1.16.0) lib/enum.ex:1700: Enum."-map/2-lists^map/1-1-"/2
    (ecto_sql 3.11.1) lib/ecto/adapters/sql.ex:1161: Ecto.Adapters.SQL.execute_ddl/4
    (ecto_sql 3.11.1) lib/ecto/migrator.ex:755: Ecto.Migrator.verbose_schema_migration/3
    (ecto_sql 3.11.1) lib/ecto/migrator.ex:563: Ecto.Migrator.lock_for_migrations/4
    (ecto_sql 3.11.1) lib/ecto/migrator.ex:432: Ecto.Migrator.run/4
    (ecto_sql 3.11.1) lib/ecto/migrator.ex:170: Ecto.Migrator.with_repo/3
    nofile:1: (file)
  • 我正在使用 MariaDB 10.22 和 :myxql 驱动程序。
  • 我尝试过调整数据库的 pool_size、queue_target、queue_internal 的值,但没有成功。
  • 我可以确认数据库连接有效并且数据库存在。
  • 我的 Dockerfile 是用
    mix phx.gen.release --docker
  • 生成的标准 Dockerfile

我唯一修改的是这部分:

CMD ["/app/bin/server"]

对此:

CMD ["sh", "-c", "/app/bin/migrate && /app/bin/server"]

任何有在 Docker/Kubernetes 中部署 Phoenix 应用程序经验的人都可以分享他们的见解/配置吗?

docker elixir phoenix-framework
1个回答
-1
投票

你找到解决办法了吗? @elixirfan2001

© www.soinside.com 2019 - 2024. All rights reserved.