使用非标准回购路径运行ecto迁移

时间:2016-05-14 08:43:22

标签: elixir ecto

我有一个"虚拟"我的混合应用中的应用,因此,它的第一次迁移放在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而不是迁移。我做错了什么?

我的尝试:

  1. 我试图删除并重新创建数据库,没有发生任何事情

  2. 我的另一个转折是需要代码。我尝试在我的test.exsdev.exs中实现此功能,但我收到了`模块Ecto.Migration未加载且无法找到

    "test/dummy/priv/repo/migrations" |> Path.join("**/*.exs") |> Path.wildcard |> Enum.map(&Code.require_file/1)

  3. 我还试图通过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

  4. 所以,它无法找到回购。悲伤,但真实

    1. 我还尝试加载shell MIX_ENV=test,然后从第二种方法调用代码,然后调用Mix.Task.run "ecto.migrate" ["-r", "Dummy.Repo"]。它回来了:呐喊给我?

    2. Github问题:https://github.com/elixir-lang/ecto/issues/1428

1 个答案:

答案 0 :(得分:0)

何塞·瓦利姆评论at github

This is fixed in Ecto 2.0.0-rc. In previous versions, migrations would always have to be inside priv. We have removed this requirement in Ecto 2.0.