gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 中使用固定装置播种数据是否危险

转载 作者:行者123 更新时间:2023-12-04 01:31:33 24 4
gpt4 key购买 nike

我的固定装置带有需要驻留在我的数据库中的初始数据(国家、地区、运营商等)。我有一个任务 rake db:seed,它将为数据库提供种子。

namespace :db do
desc "Load seed fixtures (from db/fixtures) into the current environment's database."
task :seed => :environment do
require 'active_record/fixtures'

Dir.glob(RAILS_ROOT + '/db/fixtures/yamls/*.yml').each do |file|
Fixtures.create_fixtures('db/fixtures/yamls', File.basename(file, '.*'))
end
end
end

我有点担心,因为这个任务会清除我的数据库并加载初始数据。事实上,这甚至可以在生产中做不止一次,这让我感到害怕。这是否正常,我是否只需要保持谨慎?或者人们通常以某种方式保护这样的任务?

最佳答案

用固定装置播种数据是一个非常糟糕的主意。

Fixtures 没有经过验证,因为大多数 Rails 开发人员不使用数据库约束,这意味着您很容易将无效或不完整的数据插入到您的生产数据库中。

默认情况下,Fixtures 还会设置奇怪的主键 ID,这不一定是问题,但使用起来很烦人。

对此有很多解决方案。我个人最喜欢的是运行 Ruby 脚本的 rake 任务,该脚本仅使用 ActiveRecord 插入记录。这就是 Rails 3 将要做的 db:seed ,但您可以轻松地自己编写。

我用我添加到 ActiveRecord::Base 的一个方法来补充这个,叫做 create_or_update .使用它我可以多次运行种子脚本,更新旧记录而不是抛出异常。

不久前我写了一篇关于这些技术的文章,名为 Loading seed data .

关于ruby-on-rails - 在 Ruby on Rails 中使用固定装置播种数据是否危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984479/

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