【发布时间】:2016-05-14 18:53:54
【问题描述】:
我的混合应用程序中有一个“虚拟”应用程序,因此,它的第一次迁移放在test/dummy/priv/repo/migrations/20160323060044_create_user.exs。
我想运行此迁移,但它返回 11:19:20.647 [info] Already up,这让我很失望。
这是我的test.exs:
config :ecto_state_machine, Dummy.Repo,
adapter: Ecto.Adapters.Postgres,
username: System.get_env("USER"),
password: "posgtres",
database: "ecto_state_machine_test",
pool_size: 10,
port: 5432,
priv: "test/dummy/priv/repo/"
这是我的迁移:
defmodule Dummy.Repo.Migrations.CreateUser do
use Ecto.Migration
def change do
create table(:users) do
add :state, :string, null: false
add :confirmed_at, :datetime
timestamps
end
end
end
我在跑步
MIX_ENV=test mix ecto.migrate -r Dummy.Repo
并得到烦人的already up 而不是迁移。我做错了什么?
我的尝试:
我尝试删除并重新创建数据库,但没有任何反应
-
我的另一轮是需要代码。我试图在我的
test.exs或dev.exs中实现这一点,但我收到了`module Ecto.Migration is not loaded and could not be found"test/dummy/priv/repo/migrations" |> Path.join("**/*.exs") |> Path.wildcard |> Enum.map(&Code.require_file/1) -
我还尝试通过
MIX_ENV=test mix ecto.gen.migration f -r Dummy.Repo创建一个假迁移,用引发异常的代码填充它,而不是我有MIX_ENV=test mix ecto.migrate -r Dummy.Repo # => 12:49:00.932 [info] Already up
所以,它找不到回购。悲伤,但真实
我还尝试加载 shell
MIX_ENV=test,然后从第二种方法调用代码,然后是Mix.Task.run "ecto.migrate" ["-r", "Dummy.Repo"]。它返回 :noop 给我?
【问题讨论】:
-
您是否使用
mix ecto.gen.migration create_user创建了迁移?这应该始终将事务放在 Ecto 可以读取的位置。 -
是的,我做到了。看看第三种方法
-
哇,我已经处理这个问题好几个小时了。当我最终将其范围缩小到
priv方面(并因此完成了故障排除)时,我终于遇到了您关于完全相同问题的帖子!如果ecto.gen.migration命令有效,那么ecto.migrate命令也应该有效!