wktdev
February 5, 2023, 1:37am
1
I want to create a basic JSON API and need to seed data.
I ran the following code to create the schema
mix phx.gen.json Api Post posts title:string body:text
I added this line to the controller:
resources "/posts", PostController, except: [:new, :edit]
scope "/api", HelloWeb do
pipe_through :api
resources "/posts", PostController, except: [:new, :edit]
end
I ran:
mix ecto.migrate
To seed data I am unsure of the syntax. I wrote the following in /priv
alias Hello.{Repo, Post}
Repo.insert!(%Post{title: "My first post", body: "It works!"})
Repo.insert!(%Post{title: "My second post", body: "It really does work."})
I ran mix ecto.migrate again.
My database doesn’t have any data in it. I figure I wrote the seed data incorrectly maybe.
Try mix run priv/repo/seeds.exs
or mix ecto.setup
as mix ecto.migrate
only runs migrations.
Take a look at your mix.exs
file, you’ll find an aliases/0
private function how you might want to handle seeding the database with Ecto.
defp aliases do
[
setup: ["deps.get", "ecto.setup"],
"ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],
...
]
end
For more about aliases
, see the Testing with Ecto docs.
wktdev
February 5, 2023, 6:41am
3
Is my initial Syntax correct?
Did you see any errors when running the seed file using mix run priv/repo/seeds.exs
or mix ecto.setup
?
Running mix ecto.migrate
again will not run the code to seed data which would explain why your database does not have any data in it.
And on the offchance that’s not a typo, the mix run and default ecto.setup alias above expect the code to be in priv/repo/seeds.exs
.
If you want to validate that your syntax is correct, try running your Phoenix app inside an IEx shell and then running those three lines.
You can also run your app inside IEx (Interactive Elixir) as:
$ iex -S mix phx.server
source: Phoenix Up and Running Guide
wktdev
February 5, 2023, 7:55pm
5
My syntax was wrong. I fixed it. Thanks