【Rails】使用 heart_seed 插入数据

使用背景

heart_seed 是我同事写的一个用于从 xls 文件生成 YAML 文件的 gem 。
将 xls 文件生成 YAML 文件后再进行数据插入的好处在于何以非常容易的比对差分。
当然,其缺点则是 YAML 文件没有并不如 xls 文件表现得那样直观。

安装

1
gem 'heart_seed'

使用方法

执行初始化命令生成 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
  • 在非 Rails 下需增加以下代码:
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
  1. DB 中不存在的表会被无视
  2. 第一行为列名,一旦有空列出现则右侧的数据全部被无视。

生成的 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)

Yunjie Zhang wechat
扫一扫上面的二维码加我微信