使用背景
heart_seed 是我同事写的一个用于从 xls 文件生成 YAML 文件的 gem 。
将 xls 文件生成 YAML 文件后再进行数据插入的好处在于何以非常容易的比对差分。
当然,其缺点则是 YAML 文件没有并不如 xls 文件表现得那样直观。
安装
使用方法
执行初始化命令生成 config/heart_seed.yml, db/xls, db/seeds
1
| bundle exec rake heart_seed:init
|
执行变换命令,将 xls 文件编译为 YAML 文件
1 2
| # FILES, SHEETS 为可选项 bundle exec rake heart_seed:xls FILES=XXXX.xls SHEETS=XXXX
|
执行插入数据
1 2 3 4
| # TABLES, CATALOGS 为可选项 bundle exec rake db:seed TABLES=XXXX,XXXX # or bundle exec rake heart_seed:db:seed CATALOGS=XXXXX
|
1
| require 'heart_seed/tasks'
|
xls / xlsx 文件的格式要求
| id | title | description |created_at |
|:———–|————:|:————:|:————:|:————:|
| 1 | title1 | description1 |2014/6/1 12:10 |
| 2 | title2 | description2 |2014/6/2 12:10 |
- DB 中不存在的表会被无视
- 第一行为列名,一旦有空列出现则右侧的数据全部被无视。
生成的 YAML 文件格式
1 2 3 4 5 6 7 8 9 10 11
| --- articles_1: id: 1 title: title1 description: description1 created_at: '2014-06-01 12:10:00 +0900' articles_2: id: 2 title: title2 description: description2 created_at: '2014-06-02 12:10:00 +0900'
|
catalog的使用
catalog 可以帮助用户插入指定表格的数据
config/heart_seed.yml
1 2 3 4
| catalogs: user: - users - user_profiles
|
1
| CATALOGS=user bundle exec rake db:seed
|
production 环境下必须制定 TABLES 或 CATALOG
由于在不带有参数 TABLES 或 CATALOG 的情况下为数据全插入,因此为了防止在 production 环境下发生误操作,必须制定 TABLES 或 CATALOG 。
数据库垂直分割情况下的设定
db/seeds.rb
1 2 3 4 5 6
| SHARD_NAMES = %W( #{Rails.env} shard_#{Rails.env} shard2_#{Rails.env} ) HeartSeed::DbSeed.import_all_with_shards(shard_names: SHARD_NAMES)
|