Rack経由でfcgiで動くのなら、cgiでも動くんじゃね?
ruby on railsをCGIで動かす方が、開発時は便利そうだ。CGIで動かしてみる。
あっさり動く
これあっさり動くねぇ。
背景
fcgiだとキャッシュされすぎるので、開発には向いてないと判断。
そもそも、railsのアプリを動かすのに、ポート指定したり、自動起動設定したり、プロキシ入れたり面倒なんだよ。phpみたいにファイル置くだけで動いてほしい。
passengerとかは、一度動くと便利。だけど、インストール面倒だった。cgi最高
apache でcgiを有効にする。
railsが動かしたいディレクトリでcgiが動くように設定。たとえば以下の通り。
<Directory path/to/my/app> AllowOverride all Options ExecCGI FollowSymLinks </Directory>
.htaccessを設定する
RewriteEngine ON RewriteBase /path/to/my/app/public/ RewriteRule ^.+$ dispatch.cgi [QSA,L] AddHandler cgi-script .cgi
fcgiとほとんど同じです。
dispatch.cgiを作る
ファイル名は名前は何でも良いん。.htaccessに指定した名前であれば良い。
#!/usr/bin/ruby require 'rubygems' require 'cgi' require '../config/environment' class Rack::PathInfoRewriter def initialize(app) @app = app end def call(env) env.delete('SCRIPT_NAME') parts = env['REQUEST_URI'].split('?') env['PATH_INFO'] = parts[0] #env['PATH_INFO'] = env["PATH_INFO"].sub(%r"^/book", "") env['QUERY_STRING'] = parts[1].to_s @app.call(env) end end Rack::Handler::CGI.run Rack::PathInfoRewriter.new(Book::Application)
これもfcgiとほとんど同じ。
一応環境確認のための virtualhost 設定
virtualhost 設定はこんな感じ。
<VirtualHost *:80> DocumentRoot /var/www/air.example.jp ServerName air.example.jp RailsEnv development RailsBaseURI /rails/book/public Alias /book/ /var/www/air.example.jp/rails/book/public/ <Directory /var/www/air.example.jp/rails/book/public> AllowOverride all Options ExecCGI FollowSymLinks Options -MultiViews </Directory> </VirtualHost>
一部passengerの設定が混じってるけど気にしない。