DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
Synchronizing Rails DB Contents Via Fixtures
The following rake task will dump the contents of the current environment's database to YAML fixtures. Stick the following in lib/tasks/fixtures.rake:
namespace :db do
namespace :fixtures do
desc 'Create YAML test fixtures from data in an existing database.
Defaults to development database. Set RAILS_ENV to override.'
task :dump => :environment do
sql = "SELECT * FROM %s"
skip_tables = ["schema_info"]
ActiveRecord::Base.establish_connection(:development)
(ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|
i = "000"
File.open("#{RAILS_ROOT}/test/fixtures/#{table_name}.yml", 'w') do |file|
data = ActiveRecord::Base.connection.select_all(sql % table_name)
file.write data.inject({}) { |hash, record|
hash["#{table_name}_#{i.succ!}"] = record
hash
}.to_yaml
end
end
end
end
end
After making changes to the database that you'd like to dump to fixtures:
rake db:fixtures:dump
After checking out updated fixtures from SVN:
rake db:migrate rake db:fixtures:load






Comments
Snippets Manager replied on Mon, 2007/12/10 - 3:41am
tables=ENV['TABLES'].split(',') tables ||= (ActiveRecord::Base.connection.tables - skip_tables) tables.each do |table_name|Snippets Manager replied on Mon, 2007/12/10 - 3:41am
rake db:fixtures:dump TABLES=userstweak with this...tables=ENV['TABLES'] tables ||= (ActiveRecord::Base.connection.tables - skip_tables) tables.each do |table_name|Michael Christe... replied on Fri, 2007/11/30 - 12:45am
... ActiveRecord::Base.establish_connection(RAILS_ENV) ...I did that so that I could easily transfer data from production to yaml for a mysql to sqlite data conversion. Thanks for the code. Cheers!