2016年2月7日日曜日

sinatra in さくらのレンタルサーバ

sinatraは以前ローカルに入れて触った事はあったんですが、ちょっとサーバ上で動かしてみたいと思ったので、やってみました。



なお、以下のサイトを参考にさせていただきました。ほぼそのままです。

さくらのレンタルサーバでSinatraを動かす

Rubyはデフォルトで用意されているものをそのまま使います。rvmを入れればバージョンを切り替えれますが、そのまま使った方が早いです。

さくらのレンタルサーバでは、CGIとして動作させることになりますが、素のCGIだけでは大変なので、色々ライブラリをインストールすることになります。
しかし、さくらの共有サーバでは、権限などでライブラリがインストールできないことがあります。
そのためにgemフォルダを作ってからインストールした方が何かとスムーズに事が進みます。

$cd ~
$mkdir lib
$mkdir lib/ruby
$mkdir lib/ruby/gem

.bashrcに以下を追加します。

export GEM_HOME=$HOME/lib/ruby/gem

=の部分はスペースを空けるとエラーになるようです。なので空けません。
ここではbashを使っていますが、chsの場合は.cshrcに以下を追加します。

setenv GEM_HOME $HOME/lib/ruby/gem

これでさきほど作成したフォルダ内にgemがインストールされるようになります。
追加したらもう一度.bashrcを読み込ませて、gemをインストールします。

$source .bashrc
$gem install sinatra

次にsinatraを動かしてみます。まずwwwフォルダに移動して、適当な名前のディレクトリを作り、またそのディレクトリへ移動します。移動できたら、viでindex.cgiという名前のファイルを新規作成します。これは必ずindex.cgiという名前にしておいてください。

$cd ~/www
$mkdir sinatra
$cd sinatra
$vi index.cgi 

index.cgiの内容は以下のとおりです。

[ruby]
#!/usr/local/bin/ruby
load 'start.rb'

set :run, false

Rack::Handler::CGI.run Sinatra::Application
[/ruby]

index.cgiを保存したら、chmodでアクセス権限を変更してCGIを実行できるようにします。

$chmod +x index.cgi

次にさきほどindex.cgiでロードしていたstart.rbを作成します。こちらはindex.cgiで読み込んでいる部分と同じにすればどんな名前でもいいです。

$vi start.rb

[ruby]
#!/usr/local/bin/ruby

#****はアカウント名
$LOAD_PATH.push("/home/****/lib")
$LOAD_PATH.push("/home/****/lib/ruby")
ENV['GEM_HOME'] ||= '/home/****/lib/ruby/gem'

require 'rubygems'
require 'sinatra'

get '/?' do
'Hello!'
end

get '/test/?' do
'test'
end
[/ruby]

この状態で「http://さくらのドメイン/sinatra/index.cgi 」にアクセスすると、Hello!という文字が見えるはずです。
これは'/'へアクセスしたという事です。しかし、このままだと/sinatra/testへアクセスするとエラーになります。
/sinatra/test/へアクセスするには/sinatra/index.cgi/testへアクセスしまいといけないのですが、それだと非常にかっこわるいので、.htaccessを使ってリダイレクトします。index.cgiと同じディレクトリ(ここではsinatra)に.htaccessを作り、以下を加えます。

RewriteEngine On
RewriteBase /sinatra/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.cgi/$1 [L]

これで/sinatra/test/へアクセスすることができるようになります。

0 件のコメント:

コメントを投稿