2012年4月14日土曜日

HerokuでRuby1.9.3 + Rails3.2環境構築


HerokuでRuby1.9.3 + Rails3.2環境構築
参考)http://railsapps.github.com/rails-heroku-tutorial.html


■0. はじめに

HerokuはRuntime環境を"stack"という管理概念で保持している。
・Stackの一覧
=> https://devcenter.heroku.com/articles/stack

デフォルトのstackはBamboo。
Ruby1.9系はCedarを使う。
※cedarは2012/04/14現在、public beta。


■1. herokuプロジェクト作成

・プロジェクト作成

# gitが居なければ初期化
# git init
$ heroku create {myapp} --stack cedar

# stackの確認
$ heroku stack
  aspen-mri-1.8.6
  bamboo-mri-1.9.2
  bamboo-ree-1.8.7
* cedar (beta)

$ heroku ps
Process  State           Command
-------  --------------  -------
web.1    created for 4m

・Rubyバージョンの確認

$ heroku run console
Running console attached to terminal... up, run.1
sh: console: not found
# cedarではタスクの実行は"heroku run hoge"
# rakeの実行は"heroku run rake db:reset"など
# まだrailsプロジェクトをデプロイしてないのでconsoleは動かない
# ここでconsoleが起動するようだと、後々ちょっと迷う。(後述)

・環境確認

$ heroku info
=== {myapp}
Git URL:       git@heroku.com:{myapp}.git
Owner:         myapp@example.com
Stack:         cedar
Web URL:       http://{myapp}.herokuapp.com/

$heroku config
# レスポンスなし


■2. ruby1.9.3導入
http://railsapps.github.com/rails-heroku-tutorial.html

$ heroku labs:enable user_env_compile -a {myapp}
----> Enabling user_env_compile for {myapp}... done
WARNING: This feature is experimental and may change or be removed without notice.

$ heroku config:add RUBY_VERSION=ruby-1.9.3-p125
Adding config vars and restarting app... done, v2
  RUBY_VERSION => ruby-1.9.3-p125

$ heroku config:add PATH=bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin
Adding config vars and restarting app... done, v3
  PATH => bin:vendor/bundl...in:/usr/bin:/bin

$heroku config
PATH         => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin
RUBY_VERSION => ruby-1.9.3-p125


■3. railsデプロイ

cedarはデフォルトでwebrickが動く。
thisサーバに変更しておく。

# RAILS_ROOT/Gemfile
+ group :production do
+   gem 'thin'
+ end

・デプロイ実行

# git add .
# git commit -m "foo"
$ git push heroku master

・環境確認

$ heroku ps
Process  State       Command
-------  ----------  ------------------------------------
web.1    up for 20s  bundle exec thin start -R config.r..
# Thisサーバで実行されている。

$ heroku config
DATABASE_URL        => foobar
GEM_PATH            => vendor/bundle/ruby/1.9.1
LANG                => en_US.UTF-8
PATH                => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:
/bin
RACK_ENV            => production
RAILS_ENV           => production
RUBY_VERSION        => ruby-1.9.3-p125
SHARED_DATABASE_URL => foobar

$heroku run console
Loading production environment (Rails 3.2.1)
irb> RUBY_VERSION
RUBY_VERSION
=> "1.9.3

ここで「2. ruby1.9.3導入」のステップを踏んでいるにも関わらず1.9.2が返ってくる場合は、恐らく1.9.3を導入してからアプリのデプロイを行っていない。
もう一度git push heroku masterするとrubyが1.9.3になる。
コマンドベースで反映できるのかどうかは分からない。
※heroku restartしてもダメだった。


■4. 困ったら見るサイト

http://d.hatena.ne.jp/language_and_engineering/20110914/p1
http://d.hatena.ne.jp/xyk/20101102
http://railsapps.github.com/rails-heroku-tutorial.html
https://devcenter.heroku.com/articles/rails3
https://devcenter.heroku.com/articles/rails3x-asset-pipeline-cedar