I’m in the process of starting up a web site project. My plan is to roll out the site in a somewhat rudimentary form first and then add to the site functionality along the way.
I’m using Subsonic 3 for my DAL, and I’m expecting the database will go through multiple versions as the sites evolve. This means I’ll need some kind of versioning and migration tools. I understand that Subsonic has built in migration possibilities, but I’m having difficulties grasping how to use these tools, in my scenario.
First there’s the SimpleRepository model, where the Subsonic “automagically” handles the migrations as i develop my site. I can see how this works on my dev-machine, but I’m not sure how to handle deployments with this.
-
Would Subsonic run the necessary migrations on my live site as the appropriate methods are called?
-
Is there some way I can force all necessary migrations on a site while taking the site offline, when using the Simplerepository model? (Else I would expect random users to experience severe performance cuts, as the migration routines kick in)
-
Would I be better off using the ActiveRecord model, and then handling migrations with the Subsonic.Schema.Migrator? (I suspect so)
-
Do you know of any good resources explaining how to handle this situation with the migrator? (I read the doc, but I can’t piece together how I would use this in practice)
Thanks for listening/replying.
Regards
Jesper Hauge
I would advise against ever running migrations against a live site. SubSonic’s migrations are really there to make development simpler and should never be used against a live environment. To be honest even using SubSonic.Schema.Migrator you’re still going to bump into the fact that refactoring databases is an incredibly hard problem. For example renaming a column in a table using management studio is trivial, but what happens in the background involves creating an entirely new table and migrating all the constraints, data etc. before renaming the new table.
The most effective way I’ve found for dealing with this is:
Whether you use ActiveRecord or SimpleRepository is then down to whether you want the extra features/complexity of ActiveRecord.
Hope this helps