Hi all, I’m creating a new api project using phoenix 1.3 but need it to use an existing mysql database. I’m fine with the mysql adaptor but not sure about connecting to an existing database with already populated tables. I created a context and schema using mix phx.gen.json <params>
this generated my files but also generated a migration file. Do I have to run mix exto.migrate
? I think I don’t have to, but what if in the future I really need to create a migration to modify a column type or name? What would be the right way to accomplish this?
thanks!
You can just skip the migration. There is also a flag you can pass to the generator so it is not even generated in the first place. Also take a look at the mix ecto.load
and mix ecto.dump
tasks so you can dump the structure of the production database so you have something to develop/test against.
3 Likes
cool, I’ll just skip the migration, had to change the schema name to map the database table and it worked.
btw, didn’t know about mix ecto.dump
, I just used mysqldump to get a test dump, but good to know for the next time.
thanks!
1 Like
Another tip. If your mysql field names aren’t in snake_case
, you can use the source
option in the Ecto Schema definition to rename them:
field :my_field, source: :MyField
https://hexdocs.pm/ecto/2.2.6/Ecto.Schema.html#field/3
3 Likes
Im in a similar situation, I was building out an elixir app that was using data from a database originally created & migrated by rails. I’ve since deployed the elixir app and shut down the rails app. While developing the new elixir app I generated ecto migrations that matched the rails app so that my tests would run properly. If I’m reading the above correctly, I should just mix ecto.dump
the structure, remove the migration files that got the DB to that point, and build new migrations on top of that? How does that effect the test suite?
– Edit
I think I posted without thinking about this enough.
So, there’s no real reason for me to need those duplicated migrations since the structure of the database is already to that point. Instead, what I can do is add mix ecto.dump
to in an alias around ecto.migrate
and ecto.rollback
, add structure.sql to my VCS, and add some docs stating that on a fresh setup the schema needs to be loaded before migrations runs.
(I got the alias idea from https://www.devmynd.com/blog/getting-a-schema-file-from-elixirs-ecto/)
3 Likes