HeartSeed
seed util (convert excel to yaml and insert yaml to db)
Require
-
ruby 2.0+
-
Ruby on Rails , Padrino or other ruby app
Installation
Add this line to your application’s Gemfile:
gem 'heart_seed'
And then execute:
$ bundle
Or install it yourself as:
$ gem install heart_seed
xls support
If you want to use .xls
file (NOT .xlsx
file), gem install
(or write to Gemfile) roo-xls too
see License![#license]
Usage
-
bundle exec rake heart_seed:init
-
create
config/heart_seed.yml
,db/xls
,db/seeds
-
append to
db/seeds.rb
-
-
Create xls
-
sheet name (xls,xlsx) = table name (DB)
-
example github.com/sue445/heart_seed/tree/master/spec/dummy/db/xls
-
-
bundle exec rake heart_seed:xls
-
Generate yml to
db/seeds
-
If you want to specify files:
FILES=comments_and_likes.xls SHEETS=comments,likes bundle exec rake heart_seed:xls
-
-
bundle exec rake db:seed
orbundle exec rake heart_seed:db:seed
-
Import yml to db
-
Exists
TABLES
,CATALOGS
options
-
examples
TABLES=articles,comments bundle exec rake db:seed
CATALOGS=article,user bundle exec rake db:seed
not Rails
append this to Rakefile
require 'heart_seed/tasks'
Note
-
if production
db:seed
, requireENV["TABLES"]
orENV["CATALOGS"]
Snippets
config/heart_seed.yml
seed_dir: db/seeds
xls_dir: db/xls
catalogs:
# user:
# - users
# - user_profiles
db/seeds.rb
# Appended by `rake heart_seed:init`
HeartSeed::DbSeed.import_all
# If you want to insert by ActiveRecord, replase like this.
HeartSeed::DbSeed.import_all(mode: HeartSeed::DbSeed::ACTIVE_RECORD)
# If you want to skip model validation in insert, add `validate: false` (default is true)
HeartSeed::DbSeed.import_all(validate: true)
Specification
Supported xls/xlsx format
Example sheet
id | title | description | created_at | | this is dummy — | —— | ———— | ————– | — | ————– 1 | title1 | description1 | 2014/6/1 12:10 | | foo 2 | title2 | description2 | 2014/6/2 12:10 | | baz
-
Sheet name is mapped table name
-
If sheet name is not found in database, this is ignored
-
1st row : table column names
-
If the spaces are included in the middle, right columns are ignored
-
2nd row ~ : records
-
ActiveSupport::TimeWithZone is used for timezone
Yaml format
example
---
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'
-
same as ActiveRecord::FixtureSet format
Catalog
Catalog is table groups defined in heart_seed.yml
example
catalogs:
user:
- users
- user_profiles
user
catalog = users
, user_profiles
tables
You can specify the catalogs at db:seed
task
CATALOGS=user bundle exec rake db:seed
# same to) TABLES=users,user_profiles bundle exec rake db:seed
Shard DB
When you use shard DB, write like this to db/seeds.rb
.
Rails example
SHARD_NAMES = %W(
#{Rails.env}
shard_#{Rails.env}
shard2_#{Rails.env}
)
HeartSeed::DbSeed.import_all_with_shards(shard_names: SHARD_NAMES)
Insert Mode
MODE=(bulk|active_record|update) bundle exec rake db:seed
-
bulk
(default): using bulk insert. (delete_all
and BULK INSERT) -
active_record
: import with ActiveRecord. (delete_all
andcreate!
) -
update
: import with ActiveRecord. (if exists same record,update!
, otherwisecreate!
)
License
While heart_seed is licensed under the MIT license, please note that the ‘spreadsheet’ gem is released under the GPLv3 license.
Contributing
-
Fork it ( github.com/sue445/heart_seed/fork )
-
Create your feature branch (
git checkout -b my-new-feature
) -
Commit your changes (
git commit -am 'Add some feature'
) -
Push to the branch (
git push origin my-new-feature
) -
Create a new Pull Request