HerokuでRails3.1(RC1)を動かす方法
Yokohama.rb 第9回に参加してきました。
その場でRails3.1をherokuで動かそうというニーズがあったので、ざっとまとめます。
ポイント(2011-06-05版)
- まだ3.1.0はrcなので、rvmのgemset機能を使っておこう
- pgとtherubyracer-herokuをGemfileの:productionに追加する
- rakeは現時点では0.8.7をバージョン指定しておくほうが無難
- herokuのstackをbamboo-mri-1.9.2を使っておこう
手順
Rails 3.1.0 RC1のインストール&アプリ生成
$ rvm gemset create rails31
$ rvm use 1.9.2@rails31 # もちろんrubyは1.9.2使ってますよね?
$ gem install rails --pre --version 3.1.0.rc1
$ rails new blog # とりあえずblogで
もしターミナルを閉じてしまうとまたgemsetがデフォルトのものを使うように戻ってしまうのですが、プロジェクトのルートに.rvmrcを置いておくと、毎回 rvm use を打つ必要はありません。
.rvmrcの中身
rvm use 1.9.2@rails31
これで、プロジェクトのディレクトリにcdしたときに、自動的にgemsetが切り替わります。
このへんで一回gitにコミットしておきましょう。
$ git init
$ git add .
$ git commit -m 'initial commit'
herokuで動かすために必要なgemを追加する
Gemfileはこんな感じになります。
source 'http://rubygems.org'
gem 'rails', '3.1.0.rc1'
gem 'sass'
gem 'coffee-script'
gem 'uglifier'
gem 'jquery-rails'
gem 'rake', '0.8.7'
group :production do
gem 'pg'
gem 'therubyracer-heroku'
end
group :development do
gem 'sqlite3'
end
group :test do
# Pretty printed test output
gem 'turn', :require => false
end
さてbundleしますが、普通にbundleと打つと、:productionに指定してあるpgやtherubyracer-herokuもインストールしようとしてしまいます。
ローカルにPostgreSQLが入っているのならいいと思いますが、そうではない場合は:productionのgemを除外してインストールすることができます。
$ bundle --without production
$ bundle update rake # rakeのバージョンが0.9.1が入っているので、これを打つように言われる
$ git commit -am 'modify Gemfile'
適当なアプリをでっち上げる
$ rails generate scaffold post title:string body:text
$ bundle exec rake db:migrate
$ rails server # 一応ローカルでも動作確認
$ git add .
$ git commit -m 'scaffold post'
herokuにデプロイしよう
$ gem install heroku
$ heroku create [適当なアプリ名] --stack bamboo-mri-1.9.2
$ git push heroku master
$ heroku rake db:migrate
$ heroku open
これで無事にデプロイできたはずです。お疲れさまでした。
heroku createの行の--stackオプションですが、本当なら6/1以降はデフォルトでbamboo-mri-1.9.2になるそうです。
Yokohama.rbで試したところまだ1.8.7の方で作られてしまいましたので、明示的に指定しています。
rakeのあたりとかちょっと気持ち悪いですが、もっとうまい方法があれば教えてください。
あとはRC1版で試していますので、バージョンが変わると上記の方法でできなくなるかもしれませんのでご注意ください。