Paul L. wrote:
[…]
As a concrete example, suppose you have a large table of product
information. If the table is large, loading it from a fixture (or
seed_fu file) could be slow, and anyway some of that information will
probably be edited through a separate administrative web application,
which would not be updating seed/fixture files.
Right, although I suppose you could always dump the data to YAML or
something if you needed to.
Also, you might want occasionally to add a new field to the table
(another product code field) and compute initial values via a
migration.
Yes. This is entirely appropriate (although for myself, I like to set a
default value on the DB side if things lend themselves to that).
Migrations are about state transitions, and this recalculation is part
of getting the DB to the new consistent state.
[…]
If it is very important that the new product code field have a value
for all records, you might put some validation code into the model
class to prevent new records from being created without it. Doing so
would break any earlier migration that created product records.
Generally, you wouldn’t be running the earlier migration with the later
codebase. I confess that I’m having trouble coming up with a scenario
in which you’d ever do this.
I don’t really see any solution to this problem except identifying
which tables are like this and directly copying them (from a dump
file) into the production database.
No need. As I implied above, just don’t run old migrations with new
model files. In general, you should be releasing often enough that this
won’t happen, and in any case, if problems arise, you can always apply
one commit, run migrations, and then apply the next commit (assuming
your developers are committing as frequently as they should be).
The migrations that modify them
can be coded so that they don’t do anything when run on the production
system, and that way the migrations can still be run to update other
tables (e.g. user data tables) which cannot be copied.
No! Migrations are a fabulous tool for managing DB state. Work with
them in the ways I’ve been describing, not against them. Disabling
migrations in the way you are proposing suggests that something is wrong
with your release process. Fix the problem rather than breaking your
tools. 
–Paul
Best,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]