HerokuとRails3とMongoDB
Heroku上のRailsからMongoDBの中身を参照できるあたりまで試してみました。忘れないうちにメモしておきます。今回やってみてわかったことは下記。
- 今はrails 3.0.0.rcだとそのままデプロイできない
- MongoDBを使うにはアドオンを使う(クレジットカードが必要)
- Heroku上で動くRubyのバージョンはいくつかあるうちから選べる
- herokuコマンドってべんり
Herokuのプロジェクトを作ってPush
ここのステップ通りにやれば、おおむねうまく行きました。herokuコマンドは、
% gem install heroku
で入れます。
ここは特筆すべきことが無い筈なんですが、環境がRails 3.0.0.rcだと、今現在はbundlerのバージョンが違うと怒られてHerokuにうまくデプロイできなかった。http://blog.mhartl.com/2010/07/28/deploying-to-heroku-with-rails-3-0-0-rc/を参考にbundlerのバージョンを落としたりGemfileをちょっと編集したり。これでHerokuにPushできた。
bundlerのバージョンを落とす
% [sudo] gem uninstall bundler % [sudo] gem install bundler -v 0.9.26
Gemfileをちょっと編集
source 'http://rubygems.org' #gem 'rails', '3.0.0.rc' # コメントアウト gem 'rails', '3.0.0.beta4' # バージョンを変える
bundle installし直し
% rm -f Gemfile.lock % bundle install % bundle lock
プロジェクトにアドオン「MongoHQ」を追加*1
MongoDBを使うにはプロジェクトにMongoHQというアドオンを追加します。アドオンの追加をするには無料版でもクレカの登録が必要(登録は初回だけ)。
Compose MongoDB - Add-ons - Heroku Elements
登録していないと「You must be verified to add MongoHQ Free」だったかそんな感じのことを言われます。
肝心のアドオンの追加自体は、WebからやってもTerminalのherokuコマンドでやってもいいみたいです。herokuコマンドで追加する場合は↓みたいな感じです。
% heroku addons:add mongohq:free
ローカルの開発環境からMongoHQにつないでみたりする場合、heroku console で繋いだら ENV['MONGOHQ_URL'] にDSNが入ってます。
% heroku console >> ENV['MONGOHQ_URL'] # 使ってるMongoHQのURLが入ってる => "mongodb://username:password@server:port/dbname" >> exit % export MONGOHQ_URL='mongodb://username:password@server:port/dbname' % rails c # とかでローカルからもMongoHQを見にいけたよ
DBに接続するためにGemfileとか色々編集
mongo_mapperを使うので下記をGemfileに記述。
gem 'mongo_mapper'
bundle installとかいろいろする。
% rm -f Gemfile.lock % bundle install % bundle lock
config/initializers/mongo.rb とか作って接続の部分を記述(これでいいのか?)。
require 'mongo_mapper' MongoMapper.config = { 'development'=>{'uri'=>ENV['MONGOHQ_URL']}, 'test'=>{'uri'=>ENV['MONGOHQ_URL']}, 'production'=>{'uri'=>ENV['MONGOHQ_URL']} } MongoMapper.connect RAILS_ENV
ひとまずこれで繋がるようになりました。modelとか作るのはMongoMapper, The Rad Mongo Wrapper // RailsTips by John Nunemakerを参考に。
Heroku上で動くRubyのバージョンを指定
色々触っているとHeroku上で動いているRubyのバージョンが1.8.7なことに気づきます。
デフォルトだと1.8.7が動いてるみたいです。1.9.1などに変更したい場合は、http://docs.heroku.com/bambooを参考に変更します*2。具体的には、
% heroku stack:migrate bamboo-mri-1.9.1
などとすればOK。*3