Phoenix 提示 运行 一个不存在的迁移
Phoenix prompts to run a migration that doesn't exist
让我们描述一下问题:
- 我用
mix phx.new
创建了一个新的凤凰应用
- 我在
{dev, test}.exs
中配置了一个数据库连接(我正在映射一个现有数据库)
- 我使用
mix phx.gen.context
创建了一个上下文(它创建了一个迁移)
我第一次尝试 运行 连接服务器,但它告诉我我有未部署的迁移。
there are pending migrations for repo: Some.Repo.
Try running `mix ecto.migrate` in the command line to migrate it
然后我意识到我不需要它们,因为我已经有了数据库,所以我删除了迁移文件 (/priv/repo/migrations/*
) 并重试。
现在mix ecto.migrations
什么也没有显示,但它并没有删除服务器提示。然后我发现 ecto 在数据库中为迁移创建了一个额外的 table,所以我检查了它,它是空的。
我放弃了它并再次尝试 运行连接服务器,但显示了相同的消息。
为了确保这不是 Ecto 问题,我准备了测试,它们 运行 很好,唯一的问题是当我 运行 服务器时显示的迁移提示。
我还没有任何端点,因为我计划在验证模型正常工作后使用 GraphQL,但该消息令人困惑。
该迁移是否有任何隐藏文件,或者我是否遗漏了其他内容?
堆栈跟踪:
[error] #PID<0.451.0> running Some.Endpoint (connection #PID<0.449.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
** (Phoenix.Ecto.PendingMigrationError) there are pending migrations for repo: Some.Repo. Try running `mix ecto.migrate` in the command line to migrate it
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:67: Phoenix.Ecto.CheckRepoStatus.check_pending_migrations!/2
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:27: anonymous fn/3 in Phoenix.Ecto.CheckRepoStatus.call/2
...
[error] #PID<0.454.0> running Some.Endpoint (connection #PID<0.449.0>, stream id 2) terminated
Server: localhost:4000 (http)
Request: GET /favicon.ico
** (exit) an exception was raised:
** (Phoenix.Ecto.PendingMigrationError) there are pending migrations for repo: Some.Repo. Try running `mix ecto.migrate` in the command line to migrate it
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:67: Phoenix.Ecto.CheckRepoStatus.check_pending_migrations!/2
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:27: anonymous fn/3 in Phoenix.Ecto.CheckRepoStatus.call/2
...
更新
经过进一步调查,该项目似乎以某种方式存储了 mix phx.new.context
生成的第一个迁移。
每当我重新创建数据库时,它都会提示迁移这个上下文。我的项目中没有任何文件提及该迁移。
我遇到了这个问题,只能通过删除 _build
文件夹解决,没有其他任何工作,不是 ecto.reset
也不是删除迁移 table。 Elixir 必须在某处存储与项目中的迁移相关的一些状态。
rm -rf _build/
运行 mix ecto.migrations 这将显示您的迁移。此列表将(希望)与 /priv/repo/migrations 中的列表匹配。
转到 _build//priv/repo/migrations 并从这里删除不在其他两个迁移列表中的文件。
它似乎对我有用
让我们描述一下问题:
- 我用
mix phx.new
创建了一个新的凤凰应用
- 我在
{dev, test}.exs
中配置了一个数据库连接(我正在映射一个现有数据库) - 我使用
mix phx.gen.context
创建了一个上下文(它创建了一个迁移)
我第一次尝试 运行 连接服务器,但它告诉我我有未部署的迁移。
there are pending migrations for repo: Some.Repo.
Try running `mix ecto.migrate` in the command line to migrate it
然后我意识到我不需要它们,因为我已经有了数据库,所以我删除了迁移文件 (/priv/repo/migrations/*
) 并重试。
现在mix ecto.migrations
什么也没有显示,但它并没有删除服务器提示。然后我发现 ecto 在数据库中为迁移创建了一个额外的 table,所以我检查了它,它是空的。
我放弃了它并再次尝试 运行连接服务器,但显示了相同的消息。
为了确保这不是 Ecto 问题,我准备了测试,它们 运行 很好,唯一的问题是当我 运行 服务器时显示的迁移提示。
我还没有任何端点,因为我计划在验证模型正常工作后使用 GraphQL,但该消息令人困惑。
该迁移是否有任何隐藏文件,或者我是否遗漏了其他内容?
堆栈跟踪:
[error] #PID<0.451.0> running Some.Endpoint (connection #PID<0.449.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: GET /
** (exit) an exception was raised:
** (Phoenix.Ecto.PendingMigrationError) there are pending migrations for repo: Some.Repo. Try running `mix ecto.migrate` in the command line to migrate it
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:67: Phoenix.Ecto.CheckRepoStatus.check_pending_migrations!/2
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:27: anonymous fn/3 in Phoenix.Ecto.CheckRepoStatus.call/2
...
[error] #PID<0.454.0> running Some.Endpoint (connection #PID<0.449.0>, stream id 2) terminated
Server: localhost:4000 (http)
Request: GET /favicon.ico
** (exit) an exception was raised:
** (Phoenix.Ecto.PendingMigrationError) there are pending migrations for repo: Some.Repo. Try running `mix ecto.migrate` in the command line to migrate it
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:67: Phoenix.Ecto.CheckRepoStatus.check_pending_migrations!/2
(phoenix_ecto 4.2.1) lib/phoenix_ecto/check_repo_status.ex:27: anonymous fn/3 in Phoenix.Ecto.CheckRepoStatus.call/2
...
更新
经过进一步调查,该项目似乎以某种方式存储了 mix phx.new.context
生成的第一个迁移。
每当我重新创建数据库时,它都会提示迁移这个上下文。我的项目中没有任何文件提及该迁移。
我遇到了这个问题,只能通过删除 _build
文件夹解决,没有其他任何工作,不是 ecto.reset
也不是删除迁移 table。 Elixir 必须在某处存储与项目中的迁移相关的一些状态。
rm -rf _build/
运行 mix ecto.migrations 这将显示您的迁移。此列表将(希望)与 /priv/repo/migrations 中的列表匹配。
转到 _build/