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の方が安くて自由度が高い。 ここはケースによって使い分ける必要がありそう。