AWS EC2 インスタンスで Sinatra

簡単なウェブアプリケーションを作りたいときに Sinatra が便利そうだったので AWS EC2 インスタンス上で動かしてみた。
公式の手順通りに進めたらハマりどころがあったので記録。

Sinatra 公式の手順

http://www.sinatrarb.com/intro.html にしたがったけれど上手く行かなかった。
手順は以下の通り。

# myapp.rb
require 'sinatra'

get '/' do
  'Hello world!'
end

gem で Sinatra をインストール。

gem install sinatra

起動。

ruby myapp.rb

http://localhost:4567 を見よ!

上手く行った手順

gem をインストールする

そもそも EC2 インスタンスに gem をインストールしていなかったのでインストールします。

sudo yum -y install rubygems

sinatra インストールリトライ。

sudo gem install sinatra

ruby スクリプトにもちょっと手を加える

公式の手順通り ruby スクリプトを実行すると

`require': no such file to load -- sinatra (LoadError)

というエラーが出た。

ググったら以下の記事がヒット。
https://github.com/sinatra/sinatra/issues/640

ruby 1.8 系を使っているのなら

require 'rubygems'

が必要とのこと。

また、デフォルトではポート 4567 でアプリケーションが起動するので、これをポート 80 で起動するように指定。

set :port, 80

これで行けるだろーと思ってブラウザでアクセスしても Hello, world! 表示されず。

実は Sinatra は Development 環境のデフォルト設定だと localhost からのアクセスしか受け付けないらしい。
http://qiita.com/u1_fukui/items/b86b21f6ed39f4c10d5d

だので、スクリプトに以下の記述も追加。

set :environment, :production

最終的にスクリプトは以下のようになりました。

# myapp.rb
require 'rubygems'
require 'sinatra'

set :environment, :production
set :port, 80

get '/' do
  'Hello world!'
end