本番環境のデータをステージングへ入れる
本番環境のデータをステージングへ入れる必要があり、方法を調べました。
実際には違うやり方の方が良いとの判断となり、この方法でステージングにデータを入れることはしなかったのですが、その方法について書いておきます!
方法
1.本番データをローカルへ持ってくる
自分が行ったのはherokuだったので、以下のコマンドで本番データをローカルへ持ってきます。
heroku pg:pull リモートdb名 ローカルdb名 --app アプリ名
2.落としてきたデータをseed化
ローカルに落としてきたデータをseed化するために、seed_dumpというgemを入れます。
seed_dumpというgemを入れたのち、
rake db:seed:dump
というコマンドを実行すると、
db/seed.rbの中にseedデータが作成されます!
db/seed.rbではなく、別のディレクトリに入れたいときは、以下のようにFILEオプションを指定します。
rake db:seed:dump FILE=db/seeds/dump.rb
また、全データではなく特定のモデルデータだけ入れたいときは、以下のようにMODELSオプションを指定します。レコード数の制限はLIMITオプションで指定します。
rake db:seed:dump MODELS=Client LIMIT=10
3.seedファイルをdbへ入れるrakeタスクを作成する
作成したseedをdbへ入れるためのrakeタスクを作成します。
db/seeds配下にseedデータを入れたファイルを作成した場合は以下のようにrakeタスクを作成します。
lib/tasks/seed.rake
Dir.glob(File.join(Rails.root, 'db', 'seeds', '*.rb')).each do |file|
desc "Load the seed data from db/seeds/#{File.basename(file)}."
task "db:seed:#{File.basename(file).gsub(/..+$/,'')}" => :environment do
load(file)
end
end
4.ステージング環境でrakeタスク実行
作成したseedファイルとrakeタスクをステージングへプッシュしたのち、rakeタスクを実行すればデータを流し込めます!!
感想その他
この方法でproduction環境にデータを入れようと思ったのですが、この方法だと一度git のリモートリポジトリを経由する必要があるため、
「プライベートリポジトリとは言えデータをgit hubに載せたくない」「データ量が大きい」などの問題があります。
なのでこの方法はテストデータ用のシードファイル作りなどに適しているのかなと思いました。