Heroku + Sinatra + MongoHQ
Heroku のアドオンに MongoHQ がある。16 MByte までではあるが、無料で MongoDB が使用できる。今回コレを初めて使用した。そのときのメモ。Mongoid 使用。
Herokuの設定
% heroku stack:migrate bamboo-mri-1.9.2 % heroku addons:add mongohq:free
Mongoid 設定ファイル作成
config/initializers/mongoid.rb を作成。Rails のディレクトリ構成をパクパク。自動的に読み込まれるわけではないので自分で読み込むコードを書く必要あり。設定ファイルに切り出した理由は、cronを使うから。cron で行う処理でも MongoHQ に接続させる必要があるので。
require 'mongoid' Mongoid.configure do |config| if ENV['MONGOHQ_URL'] uri = URI.parse(ENV['MONGOHQ_URL']) conn = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']) config.master = conn.db(uri.path.gsub(/^\//, '')) else env = Sinatra::Application.environment rescue nil name = env == :test ? 'test' : 'development' host = 'localhost' config.master = Mongo::Connection.new.db(name) end end
Sinatra 側はこんなコード。
configure do load File.expand_path('../config/initializers/mongoid.rb', __FILE__) end
以上で、アプリ側の設定は終了。
次はマスタデータを投入したり、バックアップをするときの方法。
開発環境からMongoHQに接続
http://support.mongohq.com/discussions/community-tips/2-logging-in-to-mongohq-for-heroku-users に、MongoHQ へ接続するための情報の取得方法が書かれている。取得した情報を元に MongoHQ へ接続する。
% mongo -u heroku -p passwd flame.mongohq.com:12345/app12345 MongoDB shell version: 1.8.1 connecting to: flame.mongohq.com:12345/app12345 >
開発環境の DB と MongoHQ の同期を取る (開発 → MongoHQ)
Clone Database
http://www.mongodb.org/display/DOCS/Clone+Database に DB の複製に関して書かれている。内容をよく見ると次の一文がある。
Must be run on the "destination" server.
どうやら MongoHQ 側で実行しなければいけないようだ。でも、開発環境は家庭内LANの中にあり MongoHQ から接続はできないので、この方法は使えなさそう。
mongodump / mongorestore
mongodump であればデータをファイルに落し、そのファイルを使ってデータを移すので、開発環境からでも使うことができそう (開発環境から MongoHQ へ接続しにいくという意味で)。
まずは開発環境でデータをダンプする。
% mongodump -d development
MongoHQ に取り込む。
% mongorestore -h flame.mongohq.com:12345 -d app12345 -u user -p passwd --drop dump/development
バックアップも同様に mongodump でOK.
% mongodump -h flame.mongohq.com:12345 -d 12345 -u heroku -p passwd -o mongohq