我在我的混合应用程序中有一个“虚拟”应用程序,因此,它的第一个迁移是放置在test/dummy/priv/repo/migrations/20160323060044_create_user.exs
中。使用非标准回购路径运行ecto迁移
我想运行此迁移,但它返回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
实现这一点,但我收到`模块Ecto.Migration未加载,无法找到"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
所以,它不能找到一个回购协议。悲伤,但真正
我还试图加载壳
MIX_ENV=test
,然后从第二方法调用代码,然后Mix.Task.run "ecto.migrate" ["-r", "Dummy.Repo"]
。它返回:对我不利?
你有使用'混合ecto.gen.migration create_user'创建迁移?这应该始终将Ecto可以读取的交易放置在该位置。 – tkowal
是的,我做到了。看看第三种方法 – asiniy
哇,我已经处理了几个小时。当我最终缩小到“priv”方面(因此故障排除完成)后,我终于遇到了同样问题的帖子!如果'ecto.gen.migration'命令有效,那么'ecto.migrate'命令也可以工作! – ibgib