2013-05-06

Rails3.2でMongoDBとHAMLとCompassを使用する

毎回ググってるのでいい加減備忘録としてまとめておく。 MongoDBのORMはもちろんMongoid。ActiveRecordは邪魔なので最初から入れません。

$ rails new testapp --skip-prototype --skip-test-unit --skip-active-record

ここでgitも。

$ git init
$ git add -A
$ git commit -m "Initial commit" -a`

タイトルにある3つの機能を有効にするため、Gemfileに記述を追加する。 それ以外にもいくつか捗るgemを入れておく。(既存のgemとコメントは省略)

ruby "1.9.3"  # MongoidはRuby1.9.2では使えない

group :development do
  gem 'better_errors'  # エラー画面をわかりやすく整形
  gem 'binding_of_caller'  # better_errorsの画面上にirbを表示
end

group :assets do
  gem 'compass-rails'  # Compassを使えるように
end

gem 'haml-rails'  # HAMLを使えるように
gem "mongoid", ">=2.0.0.beta.20"
gem "bson_ext"

書き終わったらGemたちをインストール。

$ bundle install

さらにCompassの初期ファイルを生成。

$ bundle exec compass init rails

今後、htmlがRailsによって生成される場合はerbではなくHaml形式になる。 でもすでにrails new testappでapplication.html.erbなどはERB形式で出力されているので、コレを変換する。 erb2hamlをインストールしてもいいけど、この時点では一つのファイルだけなのでわざわざGemをインストールせずにapplication.html.erbを上書きしよう。 なにしろこれだけだ。

!!!
%html
  %head
    %title Testapp
    = stylesheet_link_tag    "application", :media => "all"
    = javascript_include_tag "application"
    = csrf_meta_tags
  %body
= yield

上書き+保存したら拡張子を.hamlにして保存。 次にMongoid用の設定ファイルを作る。

$ rails g mongoid:config

するとconfig/mongoid.ymlが生成される。 この後、もしHerokuでデプロイするのであればMongoDBをアドオンとしてインストールしよう。

$ heroku addons:add mongolab

さっき作ったconfig/mongoid.ymlに以下の内容を追記する。

production:
  sessions:
    default:
      uri: <%= ENV['MONGOLAB_URI'] %>
      options:
        safe: true
skip_version_check: true

これでいい感じ。 あとは適宜ModelをつくるなりscaffoldするなりしてWebアプリケーションを作っていこう。