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)