Heroku を使い倒す(バックアップ編)
» 1時間でツイッターサービスを作ろう! | KRAY Inc
のおかげもあり、Heroku がブレイクしそうだ。
つくる社でも Libron とその姉妹サービスの Libreq を Hreoku で動かしています。個人でも エンドレス・スピッツ などいくつかのサービスを Heroku に乗せており、ノウハウも少しずつ溜まってきたので、自分のメモがわりにも少しずつ紹介していこうと思います。
Heroku には Bundles という便利なバックアップの仕組みが用意されており、これを使えばソースコードとデータベースの中身をまとめて一個のファイルに固めておくことができます。
使い方は Heroku らしく非常に簡単。Add-ons から Bundle を選択し、自分のアプリで有効にしたあとは、
heroku bundles:capture --app myapp
で bundle をひとつ heroku 上に作成します。
heroku bundles:download --app myapp
を実行すれば、できた bundle をローカルマシンにダウンロードできます。
ただし、Bundle は無料プランでは2個以上作成できない(月$20の有料プランだと無制限)ので、次のバックアップをとるには、
heroku bundles:destroy <bundle名>
で heroku 上から削除してから、新しい bundle を作成、ダウンロードしなければなりません。
つまり、作成・ダウンロード・サーバーから削除、を繰り返せば無料プランでも充分使えるということです。
そこでこの一連のタスクをスクリプトにしようと思ったら、すでに rake タスクを作っている方がいました。
» Scripting Heroku Backups : b#
を参考に、アプリ名がハードコードされていた部分を修正したものがこちら↓
heroku 上のアプリ名が myapp とすると、ローカルでのアプリのフォルダ名もそれにあわせてあると思うので、
app_name = RAILS_ROOT.split('/').last
で、アプリのパスからアプリ名を抽出しています。
これを各 rails アプリケーションの lib/tasks 以下に myapp.rake といったファイル名で保存、backups というフォルダを RAILS_ROOT 直下に作ったあと、
rake myapp:backup
を実行すれば、backups 以下にバックアップファイルをダウンロードできます。
backups 以下は git レポジトリ管理下に入れない方がいいと思うので、.gitignore に
backups/*
を追加。
あとはローカルマシンが Mac であれば cron に
30 0 * * * cd /Users/myname/rails/myapp && /usr/bin/rake myapp:backup
などとバックアップタスクを登録しておけば、自動でバックアップを取ることができて、快適な Heroku ライフを送ることができるようになります。
このエントリーに対するコメント