4

(これは、Rake&Railsと依存関係全般についての初心者の質問です。これらすべてがどのように組み合わされるかについて頭を悩ませようとしています)

基本的に、seed.rbのように機能するが、個別に呼び出されるRakeタスクが必要です。これは開発環境のテストデータを追加しますが、私のseed.rbはすべての環境の基本データを提供します。

スクリプトfamily_seed.rbは、FactoryGirlを使用していくつかのレコードを生成します。次のようになります。

require File.expand_path('../../config/environment', __FILE__)
require './spec/factories'

Family.delete_all
Member.delete_all
zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')

で問題なく動作しますbundle exec "ruby db/family_seeds.rb"が、私の質問はRakeでどのように設定するかです。すべてをRakeタスク内に配置する必要がありますか?代わりに、スクリプトを呼び出すタスクを設定し、実行時にRails開発環境が使用可能であることを確認するにはどうすればよいですか?私は仕事を成し遂げるだけでなく、「正しい」方法でそれを成し遂げようとしています。

4

2 に答える 2

6

これに取り組む1つの方法は、libにクラスまたはモジュールを作成することです(これにより、テストの記述が容易になり、コードの再利用性が向上します)。

require '../spec/factories'

class FamilySeed

  def self.seed
    raise "Don't run this in production!" if Rails.env.production?

    Family.delete_all
    Member.delete_all
    zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
    blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')
  end

end

レーキタスクを作成する方法:

require 'family_seed'

namespace :seed do
  task :families => :environment do
    FamilySeed.seed
  end
end

Family.delete_allやMember.delete_allなどを自由に使用できないように注意します。本番データベースで意図していないものを呼び出すことで、後で簡単に自分の足を撃つことができます。

rakeタスクを実行する方法:

次のようにコマンドで実行します。

bundle exec rake seed:families
于 2010-12-15T10:42:59.670 に答える
2

レーキタスクを作成し、:environmentを要求します

task :delete_all => :environement do
  require Rails.root.join('spec/factories')
  Family.delete_all
  Member.delete_all
  zinsser = Factory.create(:family, :last_name=>'Zinsser', :first_name=>'Carl', :sim_id => '500')
  blackburn = Factory.create(:family, :last_name=>'Blackburn', :first_name=>'Greg', :sim_id => '501')
end

このタスクを実行できるようになったらrake delete_all

于 2010-12-15T10:44:57.187 に答える