seed-fuでシードファイルをもっと便利に
【結論】
・Railsにはrake db:seed
で初期データを投入する方法が標準で備わっている
・しかし、環境毎に内容を分けたり、一度作成したデータは投入しない様にしたりといった細かい調整が面倒
・seed-fu
というgemを用いれば、それらの設定を簡単に行える
【目次】
【本題】
初期データの管理について
Railsにはrake db:seed
で初期データを投入する方法が標準で備わっています。
しかし、下記の様に、細かく設定を行おうとすると、少し不便です。
環境ごとにデータの内容を変える
既に作成されたデータは再投入しない様にする
デプロイと一緒に初期データを投入したい
そんな時に役立つのがseed-fu
です。
これは、シードファイルの管理を容易に行う為のgemです。
導入方法
まずはgem本体をインストールします。
gem 'seed-fu'
環境毎に読み込むシードファイルを分ける
次にdb/fixtures
ディレクトリ配下にseedファイルを作成します。
この際、development
・production
というディレクトリを作成して、そこにseedファイルを格納すると、環境毎に読み込むseedファイルを切り替える事が可能です。
データの更新したく無い場合
一度初期データを作成した後に、再読み込みしたく無い場合は、seed_onceを利用します
Point.seed_once(:x, :y) do |s| s.x = 4 s.y = 7 s.name = "Home" end
Capistranoの自動デプロイと一緒に読み込む
config/deploy.rb
に下記を記述すれば、Capistranoで本番環境にデプロイした時に、同時に初期データを投入する事も可能です。
require 'seed-fu/capistrano' # Trigger the task after update_code after 'deploy:update_code', 'db:seed_fu'
参考情報
seed-fu を使い、Rails上で使うデータを設定する話 - Qiita
railsで初期データを入れる(seed-fuの使い方) - Qiita
Railsでseed-fuを使って初期データを作ろう! - bagelee(ベーグリー)
[Rails] seed-fu を使って初期データを作成する | DevelopersIO
seed-fuで始める効率的なRails Seed管理【Rails 4 x Ruby 2.1】 | 酒と涙とRubyとRailsと