Mix ecto.gen.migration creates empty migration

Hi guys, so I’m following tutorials in the book “Programming Phoenix ≥ 1.4” (yes, I got the latest version cause the older one was just too hard to follow).

Under chapter 4 “Ecto and Changesets” everything works fine until I issue the command mix ecto.gen.migration create_users. The migration code i.e. change function is just empty.

I checked the folders and user.ex is under the folder lib/rumbl/accounts and it looks like this

defmodule Rumbl.Accounts.User do
  use Ecto.Schema
  import Ecto.Changeset
  schema "users" do
    field :name, :string
    field :username, :string
    timestamps()
  end
end

It’s probably a newbie question but after a couple of hours trying and re-trying, I couldn’t figure out the issue.

Help!

2 Likes

Yes, the migration is empty! Ecto doesn’t try to magically figure out the migration from the schema. That’s why the book explicitly asks why you fill this in:

defmodule Rumbl.Repo.Migrations.CreateUsers do
  use Ecto.Migration

  def change do
    create table(:users) do
     add :name, :string
     add :username, :string, null: false
     timestamps()
    end
    create unique_index(:users, [:username]) end
  end
end

You can probably find the exact snippet in the book. :slight_smile:

5 Likes

Hi @josevalim, I missed that sentence. I was actually tempted to copy/paste from the book but I honestly thought it was auto-generated. My mis-perception came from my background in Python/Django where similar commands do generate the migration code…

I’m just an Elixir newbie learning new stuff. Thanks for helping!

3 Likes

Hi @2trc, are you still experimenting with Elixir? I’m also used (not too much though) to Django (I come from several years on SQLAlchemy, recently moved to Django mostly because of the ease of migrations there), and I’m a bit puzzled with ecto-migrations. I’m trying to document how they work, and help people with my same background grasp the concepts. maybe you want to have a look at my work in progress pull request, and comment.

2 Likes

Unfortunately not at the moment. I’m spending some time looking into :erlang (Programming Erlang and Designing for Scalability with Erlang/OTP). Going back to the basics

I hit the same question. haha, got the same answer here.

1 Like