2016-04-23 6 views
1

Ich bin neu über Elixir und Phoenix. Ich habe versucht, die Migration für einige Migrationsdateien mit mix ecto.migrate zu laufen, aber es wirft diesen FehlerFehler Beim Ausführen von Ecto-Migration

18:27:24.471 [info] == Running FatLobster.Repo.Migrations.CreateRecipeTable.change/0 forward 
** (Ecto.MigrationError) cannot execute command outside of block 
    (ecto) lib/ecto/migration/runner.ex:139: Ecto.Migration.Runner.subcommand/1 
    _build/dev/lib/fat_lobster/priv/repo/migrations/20160423115340_create_recipe_table.exs:5: FatLobster.Repo.Migrations.CreateRecipeTable.change/0 
    (stdlib) timer.erl:197: :timer.tc/3 
    (ecto) lib/ecto/migration/runner.ex:25: Ecto.Migration.Runner.run/6 
    (ecto) lib/ecto/migrator.ex:121: Ecto.Migrator.attempt/6 
    (ecto) lib/ecto/migrator.ex:71: anonymous fn/4 in Ecto.Migrator.do_up/4 
    (ecto) lib/ecto/pool.ex:292: Ecto.Pool.with_rollback/3 
    (ecto) lib/ecto/adapters/sql.ex:582: Ecto.Adapters.SQL.transaction/8 
    (ecto) lib/ecto/pool.ex:244: Ecto.Pool.outer_transaction/6 
    (ecto) lib/ecto/adapters/sql.ex:551: Ecto.Adapters.SQL.transaction/3 
    (ecto) lib/ecto/migrator.ex:226: anonymous fn/4 in Ecto.Migrator.migrate/4 
    (elixir) lib/enum.ex:1088: Enum."-map/2-lists^map/1-0-"/2 
    (ecto) lib/mix/tasks/ecto.migrate.ex:63: anonymous fn/4 in Mix.Tasks.Ecto.Migrate.run/2 
    (elixir) lib/enum.ex:604: Enum."-each/2-lists^foreach/1-0-"/2 
    (elixir) lib/enum.ex:604: Enum.each/2 
    (mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2 
    (elixir) lib/code.ex:363: Code.require_file/2 

Und hier ist die Migration,

defmodule FatLobster.Repo.Migrations.CreateRecipeTable do 
    use Ecto.Migration 

    def change do 
    add :recipe_title, :string 
    add :recipe_description, :string 

    add :cover_img, :string 
    add :picture_one, :string 
    add :picture_two, :string 
    add :picture_three, :string 

    add :user_id, :integer 
    add :upvote_count, :integer 
    add :downvote_count, :integer 

    timestamps 
    end 
end 

Nun, was wirklich los ist hier falsch? Was ich wirklich vermisse? Soll ich nach etwas Bestimmtem suchen?

+2

Können Sie den Quelltext der Migration "CreateRecipeTable" posten? – Dogbert

+0

@Dogbert Hallo, ich habe gerade die Frage bearbeitet. –

Antwort

3

Sie vermissen den create table(...) Block:

defmodule FatLobster.Repo.Migrations.CreateRecipeTable do 
    use Ecto.Migration 

    def change do 
     create table(:recipes) do 
      add :recipe_title, :string 
      add :recipe_description, :text 
      add :cover_img, :string 
      add :picture_one, :string 
      add :picture_two, :string 
      add :picture_three, :string 

      add :user_id, :integer 
      add :upvote_count, :integer 
      add :downvote_count, :integer 

      timestamps 
     end 
    end 
end 

Mehr Infos hier: https://hexdocs.pm/ecto/Ecto.Migration.html#create/1

+0

Nun, das ist etwas, das ich sicher vermisst habe. Aber ich bekomme immer noch nicht mein Ergebnis. –

+0

@ code.prior der Fehler ist der gleiche? Was ist der neue Fehler? – psantos

+0

(FunctionClauseError) Keine Übereinstimmung der Funktionsklausel in Ecto.Migration.table/2 (ecto) lib/ecto/migration.ex: 363: Ecto.Migration.table ("rezepte", []) _build/dev/lib/fat_lobster/priv/repo/migrationen/20160423115340_create_recipe_table.exs: 5: FatLobster.Repo.Migrations.CreateRecipeTable.change/0 –

1

ich den Fehler reproduzieren können ...

** (FunctionClauseError) no function clause matching in Ecto.Migration.table/2 (ecto) lib/ecto/migration.ex:400: Ecto.Migration.table("recipes", []) _build/dev/lib/my_app/priv/repo/migrations/20160423173600_create_recipe.exs:5: MyApp.Repo.Migrations.CreateRecipe.change/0

... durch eine mit String anstelle eines Atoms.

Das heißt, Sie haben möglicherweise create table("recipes") do, und es sollte create table(:recipes) do sein.