酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

seed-fuで始める効率的なRails Seed管理【Rails4 X Ruby2.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を実行。

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

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

1
2
3
4
5
6
7
8
9
10
11
# :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に放り込めます。

1
rake db:seed_fu

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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に以下を追加。

1
2
3
4
5
6
7
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による自動デプロイ」にまとめています。もしご興味があればぜひ。

Special Thanks

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で動作確認

おすすめの書籍