さくらインターネットでrvm+Ruby1.9.3環境下でSinatraをCGIで動かす

  • 2012年2月26日 02:36
  • ruby

このご時世、VPSでもクラウドでもなく、さくらインターネットのレンタルサーバでCGIを動かす必要があったので、その備忘録。KENT-WEBみたいなかんじのPerlでもよかったのですが、せっかくなのでモダンな環境を用意してSinatraで動かしてみました。

rvm+Ruby1.9.3のインストール

さくらでRubyをインストールするときは、googleで調べるかぎりソースからコンパイルして導入しているケースが多いのですが、面倒くさいだけなのでrvmを利用します。特に変わった設定は不要で、いつも通りの感じでインストールできます。

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

で、rvmのインストール完了。パスの設定なんかが書かれた$HOME/.profileが作成されているので、

source ~/.profile

しておきます。

また、rubyは1.9.3の最新版をインストールしました。

rvm install ruby-1.9.3
# default設定
rvm alias create default ruby-1.9.3

rvm listの結果がこんなかんじになっていたらインストール成功です。

$ rvm list

rvm rubies

=* ruby-1.9.3-p125 [ i386 ]

# => - current
# =* - current && default
#  * - default

sinatraの導入

特に何も気にせず最新版を導入します。

gem install sinatra 

ちなみにインストールしたgemのバージョンはこんな感じです。

$ gem list

*** LOCAL GEMS ***

bundler (1.0.22)
rack (1.4.1)
rack-protection (1.2.0)
rake (0.9.2)
sinatra (1.3.2)
tilt (1.3.3)

さて、さくらインターネットの設定で、CGIを動かすファイルの拡張子は.cgiである必要があるので、sinatraのスクリプトも*.cgiの名前で作成します。rubyのパスはrvmでインストールされたrubyのパスを設定する必要があるので、以下のような内容になります。

#!/home/katsumatv/.rvm/rubies/ruby-1.9.3-p125/bin/ruby
ENV['GEM_HOME'] = '/home/katsumatv/.rvm/gems/ruby-1.9.3-p125'
require 'rubygems'
require 'sinatra'

get '/' do
  'Hello, World!!'
end

get '/foo' do
  'foo!'
end

set :run => false
Rack::Handler::CGI.run Sinatra::Application

ポイントは2つ。1つめは、GEM_HOMEのパスを明示的に指定してあげることです。これ、外から指定する方法がよくわからなかった上に、指定しないと動作しなかったので、シンプルにできる方法わかる方は教えていただきたいです。2つ目のポイントは最後の2行で、CGIで動作させる場合の設定として必要なことです。このへんの情報、Sinatraのドキュメント見てもよくわからなかったので、結構ハマりました。。

.htaccessの設置

さて、この状態で、start.cgiのパーミッションを755にすると、http://foo.com/start.cgiにアクセスすると「Hello, World!!」が表示されます。一方で、/fooにアクセスするためには「/start.cgi/foo」なURLでアクセスする必要があります。これはちょっとダサいので、mod_rewriteでいじることにします。httpd.confは編集できないので、.htaccessで次のような設定を記述します。

DirectoryIndex start.cgi

RewriteEngine    on
RewriteBase      /
RewriteCond      %{REQUEST_FILENAME} !-d
RewriteCond      %{REQUEST_FILENAME} !-f
RewriteRule      ^(.*)$ start.cgi/$1 [QSA,L]

これで、/fooにアクセスすると「foo!」と表示され、いつものSinatraな動作が可能になります。

まとめ

rvmを使うことで最新のRuby+Sinatra環境でcgiを動作させることができました。次はこの環境で、もう一歩踏み込んだ遊びをしてみたいと思います。

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/239
Listed below are links to weblogs that reference
さくらインターネットでrvm+Ruby1.9.3環境下でSinatraをCGIで動かす from blog.katsuma.tv

Home > ruby > さくらインターネットでrvm+Ruby1.9.3環境下でSinatraをCGIで動かす

Search
Feeds

Return to page top