«前の日記(2011-05-12 (木)) 最新 次の日記(2011-05-21 (土))»  

まちゅダイアリー


2011-05-13 (金)

HerokuでRails3+MongoDBを使う

ゴールデンウィークに作成した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の方が安くて自由度が高い。 ここはケースによって使い分ける必要がありそう。