Railsでseedデータを分割して実行できるようにする
個人的にRailsのseed運用は以外と悩みがちです。seed-fu使ったりと色々やりましたが、これから説明する方法に落ち着きました。
- ファイルを指定してseedを実行できるようにrake taskを作成する
- db/seeds以下のディレクトリを作成し、以下にxxxx.rbといった実行したい処理を書いたファイルを用意
- bundle exec rake db:seed:xxxx(作成したファイル名)で実行
rake taskの作成
コマンドでファイルを指定して実行できるようにrake taskを作成します。 ※参考に記載したサイトのコードをお借りしております。
# 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
seedファイルの用意
db/seedsというディレクトリを作成し、以下に行いたい処理を記載したファイルを作成します。 今回は例でCategory(nameカラムを持つ)モデルに対してseedデータを挿入するファイルを作成します。
# db/seeds/category.rb Category.create(name: 'サンプル')
seedファイルの実行
db/seeds/category.rbを以下のコマンドにて実行します。
~ bundle exec rake db:seed:category
これでseedデータが挿入できたかと思います。 個人的にはこのやり方が一番しっくりきているので、しばらくはこちらで続けたいと思います。