LoginSignup
7
5

More than 3 years have passed since last update.

【rails】開発環境のデータをseed_dumpを使ってseedファイルとして書き出す

Posted at

はじめに

初学者がポートフォリオ作成でハマったことをメモします。

以前書いた記事でwebサイトからデータをスクレイピングして開発環境用のデータベースに保存した。
https://qiita.com/tsubasaweb1/items/5be78cefed67020ac483

今回は本番環境のデータベースへの保存を試みた。
しかし、herokuの「Cleardb」というアドオンを使ってMySQLを使用している為、時間当たりのクエリ数に制限があり、全てのデータを保存することができなかった。
そこで今回はseed_dumpというgemを使って開発環境のデータを分割して2つのseedファイルに書き出した。
その後2つのseedファイルを使って本番環境にデータを流し込んだ。

環境

Ruby 2.6.3 ,Rails 5.2.4
インフラ:heroku

手順

gemをインストール

Gemfile
gem 'seed_dump'
ターミナル
$ bundle install


db/seedsディレクトリを作成 (seed_dumpをデフォルトで使用するとdb/seeds.rbを上書きしてしまう)

以下のコマンドを実行

ターミナル
$ bundle exec rails db:seed:dump MODELS=Fish FILE=db/seeds/20200101_fish.rb

MODELS=Fishで書き出すテーブルを指定。FILE=db/seeds/20200101_fish.rbで作るファイル名を指定。今回はファイル名を変えて2回行い、お互いのデータを補完するように半分ずつデータ消した。


db: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


heroku にpushする

データを追加したいテーブルに既にデータがある場合以下を実行してレコードを消去

ターミナル
$ heroku run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1 #全てのテーブルのレコードを消去
$ heroku run rails db:seed #db:seeds.rbのデータを入れる


dumpしたファイルを指定し、本番環境にデータを流す(今回は2つファイルを作ったのでファイル名を変えて2回行った。)

ターミナル
$ heroku run rails db:seed:20200101_fish RAILS_ENV=production

最後に

誰かのお役にたてれば幸いです。
間違えている部分があればコメントお願いいたします。

参考にした記事
https://gist.github.com/seak0503/5aa5db45abfac5c42a06
http://gre.hacca.jp/2018/09/12/rails-db%E3%83%80%E3%83%B3%E3%83%97%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%88%E3%82%A2%EF%BC%88%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A8heroku%EF%BC%89/
https://github.com/rroblak/seed_dump

7
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5