Hi Folks,

There is much discussion where I work at present regarding migrations, and 
the 'correct' usage or not of them.

TL;DR
Should migrations be used just to modify schema, and other 'deploy' tasks 
done other ways?  If yes, how to ensure no repeat runs of such tasks 
(seeds, jobs etc)

Background
Once you're live there are often additional things which need to be done on 
a deploy.  They only need running on that specfic deploy of code, not each 
subsequent deploy.  This might include:

* Sending emails to subset of customers
* Seeding new tables
* Starting off a delayed job

Currently the simplest mechanism we're aware of is to add in a migration 
which will either seed or insert jobs or whatever.  Rails then knows that 
this migration ran, and won't run it on subsequent releases.

The question is as to whether this is an abuse of migrations, given that 
it's db:migrate.  The expectation might be that they should be about schema 
transformation only..

Should migrations be considered anything to migrate the system state on a 
deploy, which includes seeds and other tasks, in which case, should 
db:migrate be renamed or aliased to something which suggests use for more 
than just 'db', like deploy:migrate (kind of like how before_filters were 
renamed to avoid confusion of people stating they should only be used for 
filters

If on the other hand, they're being abused.  What is the way to support 
single run on deploy tasks?  The migration framework is really the right 
'fit' here.  Does an abstraction of it need building for deploy:tasks which 
does the same sort of thing.

The general issue we encounter is that if on deploy today we need to run 
rake xyz and rake abc, but then next deploy we run rake cde it's prone to 
human error, rather that automation.

Additionally, rails doesn't (to my knowledge) provide a way to run db:seed 
after you have a live system which doesn't try and push prior seeds in too. 
 What is the recommended way to add seeded values to new tables in a live 
system?

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to