如何设置播种的耙子任务
-
10-10-2019 - |
题
(这确实是一个关于耙子和依赖性的新手问题。
基本上,我想要一个像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
不隶属于 StackOverflow