Rails - Populate test database with development da

2019-03-09 03:31发布

问题:

Is there any trivial way to copy the data from developmenet database into the test one? I know theres a way to copy schema and recreate database, but is there any rake task to populate test database with development one?

回答1:

You can use mysql directly:

mysqldump app_development | mysql app_test


回答2:

You can use:

rake db:test:clone

To copy the development db into test.



回答3:

For all databases:

rake db:test:clone && rake db:seed RAILS_ENV='test'


回答4:

If you just want to clone the development DB in its entirety, what's wrong with just copying the development.sqlite3 and renaming it test.sqlite3? You can automate the process by setting up a batch file (or its equivalent on your OS) that you can run from the command line.

This will work locally, but I just realized you might be thinking a non-local environment, in which case it probably won't.



回答5:

An alternative method if you use seeds (db/seeds.rb)

First, add a rake task for example to lib/tasks/test_seed.rake with this code:

namespace :db do
  namespace :test do
    task :prepare => :environment do
        Rake::Task["db:seed"].invoke
    end
  end
end

Then whenever you changed your database structure / content through migration and seeds, you can run

rake:db:test:prepare

To copy the schema and seed data.

So the complete steps would be:

rake db:migrate
rake db:seed
rake db:test:prepare


回答6:

With Postgres, copy the database like so:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;