gpt4 book ai didi

ruby-on-rails - 如何设置用于播种的 Rake 任务

转载 作者:行者123 更新时间:2023-12-03 15:58:43 24 4
gpt4 key购买 nike

(这真的是一个关于 Rake & Rails & 依赖关系的新手问题。试图让我的头脑围绕所有这些如何组合在一起)

基本上,我想要一个 Rake 任务,它的行为类似于 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 进行设置。是否应该将整个事情放在 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

关于ruby-on-rails - 如何设置用于播种的 Rake 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4448966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com