2016-05-14 23 views
1

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

我尝试:

  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

所以,它不能找到一个回购协议。悲伤,但真正

  • 我还试图加载壳MIX_ENV=test,然后从第二方法调用代码,然后Mix.Task.run "ecto.migrate" ["-r", "Dummy.Repo"]。它返回:对我不利?

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

  • +0

    你有使用'混合ecto.gen.migration create_user'创建迁移?这应该始终将Ecto可以读取的交易放置在该位置。 – tkowal

    +0

    是的,我做到了。看看第三种方法 – asiniy

    +0

    哇,我已经处理了几个小时。当我最终缩小到“priv”方面(因此故障排除完成)后,我终于遇到了同样问题的帖子!如果'ecto.gen.migration'命令有效,那么'ecto.migrate'命令也可以工作! – ibgib

    回答

    0

    何塞Valim评论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. 
    
    相关问题