2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Sinatraにseed-fuを求めるのは間違っているだろうか(Sinatraでseed-fuを使う方法)

Last updated at Posted at 2016-05-16

seed-fuとは何か

DBに初期データを投入するための仕組みとして、Rails(ActiveRecord)にはdb:seedというrakeタスクが用意されています。
このrakeタスクには冪等性がないため、実行するたびに新たなレコードが登録されます。そのため、変更が想定されるデータにおいてはdb:seedで投入する際に工夫が必要となります。

その煩雑さを解決する手段として登場するのが、seed-fuです。seed-fuでは更新されたレコードのみを操作します。つまり、値が変わったレコードはUPDATEされ、追加されたレコードはINSERTされます。

Sinatraで使う方法

この便利なseed-fuですが、Sinatraとの組み合わせで使う場合にひと手間必要となります。
Rails上での使用が前提とされているため、Sinatraにおいては自前でrakeタスクを定義する必要があります。

以下のRakefileをルートディレクトリに配置します。

require 'sinatra/activerecord'
require 'sinatra/activerecord/rake'
require 'seed-fu'

namespace :db do
  task :seed_fu do
    SeedFu.seed
  end

  task :load_config do
    require './app/app' # FIXME ActiveRecordの設定を行っているファイルを指定します。環境に合わせてパスを修正してください。
  end
end

Rake::Task['db:seed_fu'].enhance(['db:load_config'])

これによりrake db:seed_fuを実行できるようになります。

参考リンク

mbleigh/seed-fu - GitHub
sinatra-activerecord で seed_fu を使ってみた

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?