seed-fuで始める効率的なRails Seed管理【Rails 4 x Ruby 2.1】


RailsのSeedファイルをシンプルに作成するためのGem、「seed-fu」の導入手順です。DBへの初期値の投入がある場合にはオススメです。

13/12/31 21:30 Rails 4 x Ruby 2.1で動作確認


😎 seed-fuって何?

fpu_tmp_1353910657.2724_6fe60b

seed-fu」は、seedデータの追加や管理を楽にするために作られたGemです。
構造もシンプルで扱いやすいです。

🐞 seed-fuの組み込み

Gemfileに以下を追加して、bundle installを実行。

# Seed Management
gem 'seed-fu', github: 'mbleigh/seed-fu'

もし、userモデルのseedファイルを作成する場合は、db/fixtures/users.rbを作成して、次のように編集。

# :emailがユニークになる条件(省略可能)
User.seed(:email) do |s|
s.login = 'jon'
s.email = 'jon@example.com'
s.name = 'Jon'
end
User.seed(:email) do |s|
s.login = 'emily'
s.email = 'emily@example.com'
s.name = 'Emily'
end

次のコマンドでfixture内のseedファイルをDBに放り込めます。

rake db:seed_fu

🐯 補足: RSpecでseedデータをテストDBに自動でロードする

seed_fuはRSpecとの親和性も抜群です。たとえばテストのときにseedデータをDBに読み込ませたい時にはspec/spec_helper.rbに次の内容を登録すればOKです。

RSpec.configure do |config|
# 何かの設定 ...
config.before(:suite) do
SeedFu.seed
# DatabaseCleaner削除の対象外テーブルを設定(使っていない場合は不要)
seed_tables = %w(table_name)
DatabaseCleaner.strategy = :truncation, {:except => seed_tables}
DatabaseCleaner.clean_with(:truncation, {:except => seed_tables})
end
# 何かの設定 ...
end

RSpecにチャレンジしてみたい方は「RSpec/Spork/Guard/Growl/Rails 3.2.9で作る - プリチーなTDD環境!

🍣 補足: Capistranoでdeploy時に自動で読み込む

seed_fuはCapistranoとも相性バツグンです。たとえば本番デプロイ時にseedデータを本番DBに読み込ませたい場合は、config/deploy.rbに以下を追加。

namespace :deploy do
desc "Load the seed data from db/seeds.rb"
task :seed do
run "cd #{current_path}; bundle exec rake db:seed_fu RAILS_ENV=#{rails_env}"
end
end
after :deploy, "deploy:seed"

Capistranoのお手軽導入手順を「Rals3.2.9で始める Git連携Capistranoによる自動デプロイ」にまとめています。もしご興味があればぜひ。

🎃 参考リンク

mbleigh/seed-fu GitHub

ruby on rails - w RSpec, how to seed the database on load? - Stack Overflow

🏀 変更来歴

12/12/17不明 「補足:RSpecでseedデータをテストDBに自動でロードする」を追加

12/12/18 14:15「補足:Capistranoでdeploy時に自動で読み込む」を追加

13/01/15 10:50 rspec_helperの設定を修正

13/12/31 22:15 Rails 4 x Ruby 2.1で動作確認

📚 おすすめの書籍