本番環境のデータをステージングへ入れる

本番環境のデータをステージングへ入れる必要があり、方法を調べました。

 

実際には違うやり方の方が良いとの判断となり、この方法でステージングにデータを入れることはしなかったのですが、その方法について書いておきます!

 

 

方法

1.本番データをローカルへ持ってくる

自分が行ったのはherokuだったので、以下のコマンドで本番データをローカルへ持ってきます。

heroku pg:pull リモートdb ローカルdb --app アプリ名

 

 

2.落としてきたデータをseed

ローカルに落としてきたデータをseed化するために、seed_dumpというgemを入れます。

github.com

 

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タスクを作成する

作成したseeddbへ入れるための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に載せたくない」「データ量が大きい」などの問題があります。

 

なのでこの方法はテストデータ用のシードファイル作りなどに適しているのかなと思いました。