🙌
[Rails]開発・本番環境それぞれに違うSeedデータ投入方法
以前このように、fackerでのダミーデータ挿入について行いました。
前回はfackerでダミーデータを挿入する方法について説明した。
今回は、本番環境に入れたくないけれども、adminのデータだけは本番環境にseedで入れたい場合
について説明します。
前回までの作成faker file
- db/seeds/user.rb
Faker::Config.locale = :ja
#markdown faker: https://github.com/faker-ruby/faker/blob/main/doc/default/markdown.md
10.times do
user = User.create(
first_name: Faker::Name.first_name,
last_name: Faker::Name.last_name,
first_name_kana: Faker::Name.first_name,
last_name_kana: Faker::Name.last_name,
email: Faker::Internet.email,
password: "12345678",
)
15.times do
title = Faker::Lorem.sentence(word_count: 3)
# body = Faker::Lorem.paragraph(sentence_count: 3)
markdowns = []
10.times do
markdown = Faker::Markdown.random(
"headers",
"emphasis",
"ordered_list",
"unordered_list",
"block_code"
) + "\n"
markdowns << markdown
end
body = markdowns.join("\n")
@post = Post.create(
title: title,
body: body,
user_id: user.id,
post_status: 0,
)
tags = []
3.times do
tags << "#" + Faker::Lorem.word
end
# 重複を削除する
sent_tags = tags.join(" ").scan(/#\w+/).map(&:strip).uniq.map(&:downcase)
# 既存のハッシュタグを取得する
existing_tags = Hashtag.where(hashtag_name: sent_tags)
existing_tags.each do |tag|
post_hashtag = PostHashtag.where(hashtag_id: tag.id, post_id: @post.id)
PostHashtag.create(hashtag_id: tag.id, post_id: @post.id)
end
# 既存のハッシュタグと重複していないタグを追加する
new_tags = sent_tags - existing_tags.pluck(:hashtag_name)
new_tags.each do |tag_name|
tag = Hashtag.create(hashtag_name: tag_name)
PostHashtag.create(hashtag_id: tag.id, post_id: @post.id)
end
end
15.times do
Event.create(
event_name: Faker::Lorem.sentence(word_count: 3),
event_introduction: Faker::Lorem.paragraph(sentence_count: 3),
date: Faker::Time.between(from: 3.months.ago, to: DateTime.now + 3.months),
url: Faker::Internet.url,
creator_id: user.id,
event_type: Faker::Number.within(range: 0..1),
address: "Tokyo, Shinjuku City, Shinjuku, 3 Chome−38, 新宿駅",
latitude: 35.68987680887586,
longitude: 139.70061421319159,
)
end
end
- db/seed.rb
#admin情報
Admin.create!(
email: "admin@gmail.com",
password: "admin123",
)
require_relative "seeds/users"
前提条件
前提条件として、現在は開発環境と本番環境でseedsディレクトリが分かれていないため、まずは環境別のseedsフォルダを作成して その中にファイルを作成する必要があります。
そして本番と開発で分けていきます!
db/seeds/development.rb
db/seeds/production.rb
db/seeds.rb
2. 環境別にseed ファイルを作成
今回は今までのfaker使用したものはdevelopmentのみ。
adminの情報のみをproductionに反映させていきます。
- development.rb: 既存のuser.rbファイルの内容を移行します。
- production.rb: admin情報を追加します。
#production.rb
#admin情報
Admin.create!(
email: "admin@gmail.com",
password: "admin123",
)
3. seeds.rb に読み込み処理を追加
seeds.rb に、環境に応じた seeds ファイルを読み込む処理を追加していく。
以下のように Rails.env で現在の環境を取得し、その環境に応じた seeds ファイルを読み込みます。
load(Rails.root.join("db", "seeds", "#{Rails.env.downcase}.rb"))
# load(Rails.root.join("親ディレクトリ", "子ディレクトリ", "#{開発環境名.downcase}.rb))
-
本番環境でのdb:drop
RAILS_ENV=production rake db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1 -
seed
rails db:seed RAILS_ENV=production
完了!
Discussion