2008-08-17
■[さくら][ruby] さくらのレンタルサーバでramazeを動かしてみた
ramazeをさくらのレンタルサーバで動かしてみたので、その覚え書き。
ディレクトリ構造の決定
まず、ディレクトリ構造を決める。
ここでは、下記の構造で置くと仮定する。
~/www/hoge/ + start.rb #ramazeアプリのソース + lib/ #ramazeアプリが使うライブラリ一式の置き場 + dispatch.cgi #start.rb起動用CGI + .htaccess #Apache設定ファイル + log/ #ログ置き場。"chmod 700 log"でWebから見えないようにしておく
この構造で、Webからは、http://<ユーザ名>.sakura.ne.jp/hoge/ でアクセスできるようにする。
インストール
最初、rubygemsを使ってローカル環境(Mac)にインストールして、必要なファイルをさくらにアップロードしようとした。しかし公開されているgemが古いのか、同梱されているサンプルがCGIでうまく動かない。そこで、直接 git のリポジトリからソースを取ってくる事にした。
まずは、http://git.or.cz/ から git のバイナリをダウンロードしてインストール。
続いて、以下のコマンドで最新のソースをインストール。
mkdir git cd git git clone git://github.com/manveru/ramaze.git cd ramaze rake gem cd pkg sudo gem install -l ramaze
私のローカル環境の場合、以下のディレクトリにソース一式が格納されたので、そのソース一式をさくらのレンタルサーバ上にアップロード。
/usr/lib/ruby/user-gems/1.8/gems/ramaze-2008.08.17/lib/
私の場合は、ローカル環境にもramazeをインストールしたかったので、gemでインストールした。ローカル環境にインストール不要なら、gitでソースを取ってきたあと、ramaze/libディレクトリ以下のソース一式を直接アップロードしても良いと思う。
アップロードしたソース一式は、~/www/hoge/lib/ 以下に置いておく。
start.rb
Ramazeアプリケーションのソース。ファイル名は何でも良いが、ファイル名を変えた場合は、それに合わせて dispatch.cgi も変える必要がある。
ここでは例として、Ramazeに同梱のサンプルsimple.rbを参考に、動作確認用に作ったサンプルアプリを載せておく。
require 'ramaze' class SampleController < Ramaze::Controller engine :Erubis map '/' layout :layout def index %{ <a href='input'>input</a><br/> <a href='view_request'>view request</a><br/> <a href='sum/2/5'>2+5</a><br/> <a href='other'>Hello</a><br/> <a href='other/now'>now</a><br/> } end def input @title = '入力してね' @default_value = 'デフォルト' %{ <form action="output" method="post"> パラメータ:<input type="text" name="input" value="<%== @default_value %>"/> <input type="submit" value="入力" /> </form> } end def output @title = '入力を受け付けました' %{ 入力: <%== request[:input] %> } end def view_request request.inspect end deny_layout :view_request def sum first, second first.to_i + second.to_i end def layout %{ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <h1><%== @title %></h1> <%= @content %> </body> </html> } end end class OtherController < Ramaze::Controller map '/other' def index "Hello, World from #{self.class.name}" end def now "Hi, it's #{Time.now} now." end end Ramaze.start
今回は、このサンプルを使って動作確認した。
なお、このサンプルを動かすにはErubisが必要なので、Erubisのソース一式も ~/www/hoge/lib/ 以下に置く。
Erubis: fast and extensible eRuby implementation
dispatch.cgi
ramazeのドキュメントに書いてあるdispatch.cgiは古いようなので、以下のように書き直したものを使った。ついでに、ディレクトリ構造に合わせて、少し手直しもした。
#!/usr/local/bin/ruby $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/lib") require 'ramaze' Ramaze::Global.adapter = :cgi Ramaze::Log.loggers = [ Ramaze::Logger::Informer.new( File.join(__DIR__, 'log', 'ramaze.cgi.log') ) ] $0 = File.join(File.dirname(__FILE__), 'start.rb') require $0
Ramazeアプリケーションのソースファイル名を 'start.rb' 以外に変えた場合は、dispatch.cgi中のソースファイル名も書き換えることに注意。
.htaccess
これもramazeのドキュメントを参考にした。さくらの環境に合わせて、一部コメントアウトしたり、ErrorDocumentの記述を変えた(末尾の"を削除)。
# General Apache options #Options +FollowSymLinks +ExecCGI #AddHandler cgi-script cgi rb # Redirect all requests not available on the filesystem # to Ramaze. By default the cgi dispatcher is used which # is very slow. For better performance replace the # dispatcher with the fastcgi one RewriteEngine On RewriteBase /hoge #RewriteRule ^$ index.html [QSA] #RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.cgi/$1 [QSA,L] # In case Ramaze experiences terminal errors. # Instead of displaying this message you can supply a # file here which will be rendered instead. # # Example: # ErrorDocument 500 /500.html ErrorDocument 500 "<h2>Application error</h2>Ramaze failed to start properly
RewriteBaseの「/hoge」の所は、ディレクトリ構造に合わせて記述を変える必要があるので、注意。
動作確認
以上で配置は終了。http://<ユーザ名>.sakura.ne.jp/hoge/ でWebブラウザからアクセスできるはず。
うまくいかないときは、ruby -I./lib start.rb や ruby -I./lib dispatch.cgi(起動後、Ctrl-Dを押す) で直接アプリを起動して、コンソールやログにエラーメッセージなどが出ていないか確認する。
- 21 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:unofficial&hs=7Qh&q=html+ruby+フレームワーク&btnG=検索&lr=
- 20 http://d.hatena.ne.jp/Denma/20541231
- 7 http://anond.hatelabo.jp/20080923222016
- 7 http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla:ja:official&hs=4d8&lr=lang_ja&sa=X&oi=spell&resnum=0&ct=result&cd=1&q=dispatch.cgi+ruby&spell=1
- 7 http://www.google.com/search?num=100&hl=ja&safe=off&client=opera&rls=ja&hs=o5j&q=Ramaze+cgi&btnG=検索&lr=
- 6 http://www.google.com/search?client=opera&rls=ja&q=さくら+ramaze&sourceid=opera&ie=utf-8&oe=utf-8
- 6 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=CGI+フレームワーク&num=50
- 5 http://d.hatena.ne.jp/Denma/20080911
- 5 http://d.hatena.ne.jp/keyword/Ramaze
- 4 http://d.hatena.ne.jp/Denma/20080912