質問

(これは本当に一般的なRake&Rails&依存関係についての初心者の質問です。これがどのようにぴったりと私の頭を包み込もうとしています)

基本的に、Seed.RBのように機能するが別々に呼ばれるレーキタスクが必要です。開発環境のテストデータを追加しますが、私の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でそれをセットアップする方法です。すべてをレーキタスク内に配置する必要がありますか?代わりに、Rails開発環境が実行されたときに利用可能であることを保証しながら、スクリプトを呼び出すタスクをどのように設定できますか?私は仕事を成し遂げようとするだけでなく、「正しい」方法でそれをするようにしています。

役に立ちましたか?

解決

これにアプローチする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のようなものを自由に使用しすぎるようにすることに注意してください。プロダクションDBで意味しないものを呼び出すことで、後で簡単に足を撃つことができます。

レーキタスクの実行方法:

次のようにあなたのコマンドでそれを実行します:

bundle exec rake seed:families

他のヒント

レーキタスクを作成し、環境を必要とします

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top