quick n00b question. If I am working on one computer on a new rails
app, commit it to SVN, and then checkout to another computer. Once I
create the database (without tables), When i run rake db:migrate, will
it run all migrations on the new computer so that the database
structure is the exact same as the original computer that I was
I guess the question here is if you move a rails app with several
migrations to another computer and run the rake script, will it
iterate through all migrations effectively creating the same database
or will it only run the last migration.
Im sure this question is retarded.
It will run all migrations that have not been ran on that computer.
Computer A has 5 migrations, and has ran them all. Computer B has only three and has ran only two. Computer A commits to the repository the other two, computer B does an “svn up” and gets two more, runs rake db:migrate and it will run these two new ones as well as the one that hasn’t been run.
Just to clarify...
As a result of running migrations you'll get a table in your db called
'schema_info' that has only one column (version). That table is used
to track the number of the last migration run against the DB. So, if
you check out the project on a new PC, create the DB (rake
db:create:all), and migrate, you'll create the schema_info table with
no value in version, then run each migration in turn until you hit the
last. In the future, if you add more migrations they can also be
checked out to the other PC and db:migrate will recognize that the
current migration set has newer migration than is reflected in
schema_info and will only run the unexecuted migrations.
BTW, the actual implementation of this is scheduled for change in 2.1
(timestamped migrations) but the net result is the same.