2016-05-14 56 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. 
    
    相關問題