(这确实是一个关于耙子和依赖性的新手问题。

基本上,我想要一个像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", ,但我的问题是如何用耙子进行设置。整个东西应该放在耙子任务中吗?相反,我如何设置一个可以调用脚本的任务,同时确保Rails开发环境运行时可用?我不仅要完成工作,还要以“正确”的方式完成工作。

有帮助吗?

解决方案

接近此方法的一种方法是在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