herokuにrailsアプリをデプロイする(Error H10 ってなに;;)

railsによるアジャイルWebアプリケーション開発第4版を読んだので早速herokuでアプリでも・・・
と思ったらRubyrailsも初心者で結構つまづいたのでメモ。

herokuへのサインアップ等は終わってるものとします。
Hello Worldまでは以下が参考になりました。
http://d.hatena.ne.jp/ruedap/20110128/ruby_heroku_sinatra_hello_world

まずはRailsアプリを普通に用意する

memberlist というアプリで、userテーブルを作って、scaffoldでCRUDできるところまで作ります。

アプリ作成
$ mkdir ~/projects/ruby
$ cd ~/projects/ruby
$ rails new memberlist
scaffold でユーザーテーブルともろもろコード生成
$ cd memberlist
$ rails g scaffold user code:string name:string
$ rake db:migrate
rootを設定しておく

config/routes.rb

root :to => 'users#index'
$ rm public/index.html

(既にgit initされてる場合は git rm public/index.html)

ローカルで確認

http://localhost:3000/ にアクセスして「Listing users」とか出てればOK。

heroku にデプロイ

git にする
$ git init
$ git ci -am "initial commit"
とりあえずデプロイしてみる

heroku create 時にアプリ名を指定することも出来ます。

$ heroku create
$ git push heroku master
$ heroku rake db:migrate
$ heroku open
Application Error となる

ブラウザでherokuのアプリが表示されるがApplication Errorとなっている。

$ heroku logs
2012-06-15T12:08:37+00:00 heroku[router]: Error H10 (App crashed) -> GET morning-sword-1974.heroku.com/ dyno= queue= wait= service= status=503 bytes=

Error H10 謎のエラー。

対処

本番はassetsとかのプリコンパイルが必要

heroku rake assets:precompire とかの方法もあるらしいが、とりあえずライブコンパイルを有効に。

config/environments/production.rb

config.assets.compile = true

false -> true に変更。

herokuにJS実行環境が無い

gem入れる。

Gemfile

gem 'therubyracer'
herokuはsqlite3じゃなくてPostgreSQL

config/database.yml は書き換えなくても勝手にPostgreSQL使うらいい。
gemを追加しておく。

Gemfile

gem 'pg'

改めてデプロイ

bundle install するとGemfile.lockが更新される。

$ bundle install
$ git add .
$ git ci
$ git push heroku master
$ heroku rake db:migrate
$ heroku open

これでheroku上でも「Listing users」が見えてるはずです。

結局数行修正するだけで良かったんだけど、herokuもRubyrailsも全部初心者だったので結構辛かった。
Rubyの文化なのか、すぐにバージョンが上がってちょっと前の情報通りに行かないとかがよくあって大変。