HerokuでRails3+MongoDBを使う
2011-05-13
ゴールデンウィークに作成したRailsアプリを動かすのに、 Rails のホスティングサービスであるHerokuを使ってみた。 使い方を忘れてしまいそうなので、手順をメモしておく。 基本的な手順はheroku で rails3 と MongoHQ を使うためにやったことを参考にした。
HerokuはRails(というかRackアプリ)の動作環境を提供するサービス。Google App Engine の Rails 版みたいなもの。 App Engine と違って、特定の技術にロックインされないところが嬉しい。
herokuの操作は、コマンドラインから heroku コマンドを使う。 heroku コマンドは RubyGems で提供されている。 まずは必要なライブラリを gem でインストールする。
$ sudo gem install heroku
$ sudo gem install rails
$ sudo gem install bundler
次にrailsコマンドを使ってアプリのひな形を作る。 -T, -O, -Jオプションはお好みで。
$ rails new machu-test -T -O -J
$ cd machu-test
herokuサーバへのアップロードにはgitを用いるので、ローカルでもgitで管理することになる。 さらにアプリで使うライブラリはBundlerで管理される。Bundlerはライブラリをvender/bundleディレクトリに配置するので、このディレクトリをgitの管理対象外にする。(herokuサーバにアップロードすると、heroku側で関連ライブラリを配置してくれる)
$ vim .gitignore
末尾にvendor/bundleを追加する
この時点でgitのリポジトリをローカルに作成。
$ git init .
$ git add .
$ git commit -m 'initial import'
次にherokuコマンドを使ってheroku側にアプリを作成する。
$ heroku apps:create machu-test
Creating machu-test... done
http://machu-test.heroku.com/ | git@heroku.com:machu-test.git
Git remote heroku added
この時、自動的にgitのリモートリポジトリとしてherokuサーバを登録してくれる。
$ git remote show heroku
* remote heroku
Fetch URL: git@heroku.com:machu-test.git
Push URL: git@heroku.com:machu-test.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (up to date)
アプリをherokuに登録するにはgit pushコマンドを使う。
$ git push heroku master
これでローカルにコミットしたアプリがheroku側にアップロードされる。 herokuを使うにはgitコマンドをある程度使える必要があるけど、とりあえず以下を覚えておけばOK。
$ git add -A
$ git commit -m 'commit message'
$ git push heroku master
あとはおいおいSubversion ユーザーが Git を使ってみた (基本操作編)で覚えていけばいい。 作成したアプリはHerokuの管理画面で見ることができる。
データベースに MongoDB を使う
MongoDBはいわゆるNoSQLの一種。 Herokuの標準DBはPostgreSQLだけどMongoDBを使うこともできる。 Herokuの場合はMongoDBのホスティングサービスであるMongoHQへのコネクタとして提供されている。
heroku addonsコマンドを使ってコネクタをインストールする。
$ heroku addons:add mongohq:free
Adding mongohq:free to machu-test... done (free)
$ heroku addons
logging:basic
mongohq:free
shared-database:5mb
次に、RailsからMongoDBを使うためのライブラリであるMongoidをインストールする。 MongoidはActiveDirectoryのMongoDB版。 Gemfileに必要なライブラリを書く。
$ vim Gemfile
gem 'rails', '3.0.7'
gem 'mongoid', '>= 2.0.1'
gem 'bson_ext', '>= 1.3.0'
gem 'jquery-rails', '>= 1.0'
bundleコマンドを使ってgemをインストール。
$ bundle install
ジェネレータを使ってひな形を作る。
$ rails generate jquery:install
$ rails generate mongoid:config
create config/mongoid.yml
データベースへの接続はmongoid.ymlに書く。
$ vim config/mongoid.yml
production:
uri: <%= ENV['MONGOHQ_URL'] %>
MONGOHQ_URLはherokuサーバ側の環境変数として設定されている。 環境変数の確認にはheroku configコマンドを使う。
$ heroku config --long
MONGOHQ_URL => mongodb://heroku:password@flame.mongohq.com:27097/app000000
MongoHQはWebでの管理画面も提供している。 管理画面にアクセスし、Remote Connectionsに上記のURLを登録することで、Web上からDBの中身を見ることができる。
これで準備は完了。 あとはいつものようにアプリを作れば、普通に使える。
まとめ
herokuを使うことでサーバをセットアップせずに、気軽にRailsアプリを動かせるにはメリットになる。 一方、無料で使える範囲はかなり限られている。DBはPostgreSQLで5MB、MongoHQで15MB。 なので、場合によってはVPSの方が安くて自由度が高い。 ここはケースによって使い分ける必要がありそう。