(这确实是一个关于 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 开发环境在运行时可用?我不仅努力完成工作,而且努力以“正确”的方式完成工作。
解决这个问题的一种方法是在 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
如何创建 rake 任务:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)