greetings,
I’m wondering if anyone else has faces the task of migrating multiple
databases? How can one do this is an automated fashion?
Currently I’m running usual “rake db:migrate” from cmd, where I’ll
manually edit the database.yml :database line to indicate the current
DB. This is done is a sequential fashion. While this is fine for
working out the migrations, it’s going to be real tedious for migrating
the 50+ production databases.
Thus I’d like to come up with a ruby script that will run the migration
for each DB automatically.
Two issues I see…
-
how does one run migrations from ruby? is it a /path_to_app/rake db:migrate
, generally I like to avoid cmd line executions in scripts
-
how does one programmatically reset the migration connection? I know
I can do a “model_obj.establish_connection” for ActiveRecord, but I
don’t see anything similar for migration.
Having these resolved, I envision something like…
database_list.each{|db|
migration.connection(db)
migration.run
}
Thank You,
andy koch
HI Andy,
I believe you need to be looking at Capistrano. Depending upon your
situation.
And, if I may ask, what kind of app is using 50+ identical databases?
–
Peter F.
Peter F. schrieb:
HI Andy,
I believe you need to be looking at Capistrano. Depending upon your
situation.
And, if I may ask, what kind of app is using 50+ identical databases?
–
Peter F.
ah, I was thinking of Cap, but I’m fairly hackish with it. I’ll see
where that leads me.
what kind of app? sure you may ask, it’s an inherited PHP app that runs
Firebird. the app manages text strings for desktop apps where each DB
is a different branch
I didn’t design it, I inherited it, and now I’m rail-ifying it.
/ak
Without knowing more detail, it sounds like your design could use some
refactoring-love along the way.
Maybe a couple habtm tables with strings/context relationships?
Good luck!
On 7/17/07, Andy K. [email protected] wrote:
–
/ak
–
Peter F.
If you have multiple databases with the same schema, you might use
something like:
databases.each do |database|
ActiveRecord::Base.establish_connection :adapter => “adapter”,
:host => “host”,
:username => “username”,
:password => “password”,
:database => database
ActiveRecord::Migrator.migrate(“db/migrate/”)
end
I made a db:migrate_all rake task Parked at Loopia (which I
saved in lib/tasks/migrate_all.rake)
Just need to play with better sql config, probably read from
database.yml, but it works fine for me having one rails app, kind of
CMS, connecting to database dependently on request.host in application
controller, so each site has its own db and data directory.
I had to do this because I have mongrel_cluster with apache
mod_proxy_balancer, and I cannot afford to run cluster for each site, so
I need one rails app with one scalable mongrel_cluster and a lot of
sites sharing it.
Got hint with this from guy with nick pythonic on
#removed_email_address@domain.invalid