Ton*_*ony 11 ruby-on-rails fixtures random-seed
我有需要驻留在我的数据库(国家,地区,运营商等)的初始数据.我有一个任务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
Run Code Online (Sandbox Code Playgroud)
我有点担心,因为这个任务擦除我的数据库干净并加载初始数据.这甚至可能在生产中不止一次这样做的事实吓跑了我.这是正常的,我只需要谨慎吗?或者人们通常以某种方式保护这样的任务?
Luk*_*ncl 18
使用灯具播种数据是一个非常糟糕的主意.
Fixtures未经过验证,并且由于大多数Rails开发人员不使用数据库约束,这意味着您可以轻松地将无效或不完整的数据插入到生产数据库中.
Fixtures也默认设置了奇怪的主键id,这不一定是个问题但是很烦人.
有很多解决方案.我个人最喜欢的是一个rake任务,它运行一个Ruby脚本,只使用ActiveRecord插入记录.这就是Rails 3将要做的事情db:seed,但您可以轻松地自己编写.
我用我添加到ActiveRecord :: Base调用的方法补充了这一点create_or_update.使用这个我可以多次运行种子脚本,更新旧记录而不是抛出异常.
我写了一篇关于这些技术的文章,后来称为加载种子数据.
| 归档时间: |
|
| 查看次数: |
6034 次 |
| 最近记录: |