at posts/single.html

Sinatra版Amazon-Auth-Proxyを Heroku の Cedar スタックに設置

たださんがSinatra版Amazon-Auth-Proxyの運用を始めたので、Herokuの(近いうちにデフォルトになるであろう)Cedarスタックに設置した。 手順は基本的にBamboo版と同じ。 異なるのは、アプリ作成時にcedarスタックを明記するところ。

$ heroku apps:create amazon-auth-proxy-machu --stack cedar

もう一つは、cedarスタックの場合に必要となるProcfileを追加したこと。

$ cat Procfile
web: bundle exec rackup config.ru -p $PORT

これでcedarスタックで動かせるんだけど、ちょっと問題がある。

$ curl -i 'http://amazon-auth-proxy-machu.herokuapp.com/jp/'

HTTP/1.1 302 Found 
Content-Type: text/html;charset=utf-8
Date: Sun, 23 Oct 2011 14:28:50 GMT
Location: http://webservices.amazon.co.jp/onca/xml?AssociateTag=machu-proxy-22&Timestamp=2011-10-23T14%3A28%3A50Z&Signature=gCMvMGg%2FB%2B%2FNM5RLNJqTwLXbr%2FpBB7j1BpIX40KdP2I%3D
Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)
X-Frame-Options: sameorigin
X-Xss-Protection: 1; mode=block
Content-Length: 0
Connection: keep-alive

この結果の「Server: WEBrick/1.3.1 (Ruby/1.9.2/2011-02-18)」に注目。 WEBrickで動いちゃってる。

これを防ぐためには、以下のようにGemfileとProcfileを修正してthinで起動すればいい。

$ cat >> Gemfile
gem 'thin'

$ cat > Procfile
web: bundle exec thin start -p $PORT

…んだけど、Webブラウザからアクセスすると以下のようにエラーになる。

$ foreman start
23:31:55 web.1     | started with pid 77858
23:31:57 web.1     | >> Using rack adapter
23:31:57 web.1     | >> Thin web server (v1.2.7 codename No Hup)
23:31:57 web.1     | >> Maximum connections set to 1024
23:31:57 web.1     | >> Listening on 0.0.0.0:5000, CTRL+C to stop
23:32:09 web.1     | /Users/machu/.rvm/gems/ruby-1.9.2-p290/gems/eventmachine-0.12.10/lib/em/connection.rb:39:in `block in new': undefined method `associate_callback_target' for #<Thin::Connection:0x00000100a88be8> (NoMethodError)
23:32:09 web.1     |    from /Users/machu/.rvm/gems/ruby-1.9.2-p290/gems/eventmachine-0.12.10/lib/em/connection.rb:36:in `instance_eval'
(中略)
23:32:09 web.1     |    from /Users/machu/.rvm/gems/ruby-1.9.2-p290/bin/thin:19:in `<main>'
23:32:09 web.1     | process terminated
23:32:09 system    | sending SIGTERM to all processes

調べてみたけど、以下の記事が見つかったくらいで解決策は分からないまま。

追記

Herokuにアップすると普通に動いた。 OS依存の問題なのかなぁ。(エラーになるのはMac OS Xの10.6.7)

関連する日記