#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
以前書いた記事で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をインストール
gem 'seed_dump'
$ bundle install
$ bundle exec rails db:seed:dump MODELS=Fish FILE=db/seeds/20200101_fish.rb
MODELS=Fish
で書き出すテーブルを指定。FILE=db/seeds/20200101_fish.rb
で作るファイル名を指定。今回はファイル名を変えて2回行い、お互いのデータを補完するように半分ずつデータ消した。
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 run rails db:migrate:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1 #全てのテーブルのレコードを消去
$ heroku run rails db:seed #db:seeds.rbのデータを入れる
$ 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