Rails: CakePHP と同居させる(メモ)

いま、CakePHP で構築された Web サイトがあり、同じドメインのサブ URIRails アプリケーションを同居させたいとします。

仮に、そのドメインを example.jp とし、サブ URI を /forum とします。つまり、http://example.jp/foo/bar などにアクセスがあれば従来どおり CakePHP が処理し、http://example.jp/forum/messages などにアクセスがあれば Rails が処理する、という風にしたいということです。

まずは、Rails アプリケーションをデプロイメントします。場所は、/var/rails/forum/current としましょう。

さて、現行の httpd.conf から関係する部分を抜粋します。



DocumentRoot "/var/www/example"
ServerName example.jp
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.access.log "combined"


allow from all
Options -Indexes


これを次のように変更します。



DocumentRoot "/var/www/example"
ServerName example.jp
ErrorLog /var/log/httpd/example.error.log
CustomLog /var/log/httpd/example.access.log "combined"


allow from all
Options -Indexes

RackBaseURI /forum

allow from all
AllowOverride all
Options -MultiViews
RackEnv production
PassengerRestartDir /var/rails/forum/shared/tmp


Rails のバージョンは 3 を仮定しているので、RailsBaseURI ではなく RackBaseURI を指定しています。

次に、シンボリックリンクを設定します。


$ ln -s /var/rails/forum/current/public /var/www/example/forum

続いて、/var/www/example/.htaccess を変更します。変更前は、こんな風になっているでしょう。



RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]

変更後は次のようになります。



RedirectMatch permanent ^/forum$ /forum/
RewriteEngine on
RewriteBase /
RewriteRule ^$ app/webroot/ [L]
RewriteCond %{REQUEST_URI} !^/forum/
RewriteRule (.*) app/webroot/$1 [L]