加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何为播种设置Rake任务

发布时间:2020-12-17 03:09:56 所属栏目:百科 来源:网络整理
导读:(这实际上是一个关于Rake Rails依赖关系的新手问题.试图围绕这一切如何融合在一起) 基本上,我想要一个像seed.rb一样的Rake任务,但是需要单独调用.它为开发环境添加了测试数据,而我的seed.rb为所有环境提供了基本数据. 脚本family_seed.rb使用FactoryGirl生成
(这实际上是一个关于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,:sim_id => '500')
    blackburn = Factory.create(:family,: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读