9/13/2006

Lighttpd 的 Rails加 PHP 設定 (相同 Domain不同目錄)

上一篇介紹了不同 Domain 的 Rails 加 PHP 設定。而根據Syschen這篇文章,裡面介紹了 Single Domain 不同 web dir的設定方式,實在受益良多。但是根據 ihower 的回報
成功跑起來之後,我發現 public 裡面的css跟圖片連結等還是不對。
我嘗試了一下,當我將一個跑 Multi Domain 的 Lighttpd 改成單一 Domain ,將一個原本顯示好好的圖片,像是 http://rails.host.com/images/abc.jpg 改成了 http://rails.host.com/rails/images/abc.jpg 之後,然後 reload,他會出現

Routing Error

Recognition failed for "/rails/images/logo_friends.gif"
恩,很明顯出現上面 ihower 兄講的問題。根據 PTT 版友 tka  提示我
小弟 亦遇此問題 經由google搜尋後
自中這個網頁獲得解答
關鍵在於 alias.url 這個設定值 若依照該網頁之方式設定 便可得到 正常的結果
所以我仔細看了一下這個網頁,簡單列出幾個重點,除了我上一篇的重點外,還要加上 alias.url 才可正常 work

Lighttpd Conf

var 部份一樣加入一個 var.railsbasedir
var.railsbasedir = "/var/www/friends.roodo.com/rail1/"

Modules 要加上 mod_fastcgi , mod_rewrite, mod_redirect , mod_alias
server.modules += ("mod_fastcgi" , "mod_rewrite", "mod_redirect" , "mod_alias")

index file 要加上 dispatch.fcgi
index-file.names = ( "index.php", "index.html","index.htm", "default.htm", "dispatch.fcgi" )
Virtual Domain 要改成 目錄設定
$HTTP["url"] =~ "^/rails/" {
include 'rails.conf'
}

$HTTP["url"] =~ "^/php/" {
include 'php.conf'
}
rails.conf 等下就會講到怎麼寫,php.conf 可以看 Lighttpd 的 Rails and PHP 設定 (不同 Domain ) 寫法

在 lighttpd config 底下新開一個 Rails.conf

我加入了 alias.url
server.document-root = var.railsbasedir+"public/"
alias.url = ( "/rails/" => var.railsbasedir+"public/" )
server.error-handler-404 = "/dispatch.fcgi"
server.indexfiles = ( "dispatch.fcgi", "index.html" )
fastcgi.server = ( ".fcgi" =>
( "localhost" =>
(
"min-proc" => 1,
"max-proc" => 1,
"socket" => var.railsbasedir+"tmp/app1-fastcgi.socket",
"bin-path" => var.railsbasedir+"public/dispatch.fcgi",
"bin-environment" => ( "RAILS_ENV" => "development" )
)
)
)


Rails Routing Config

修改 conf/route.rb,告訴 Rails 您處於 http://www.abc.com/rails/ 底下
map.connect 'rails/:controller/service.wsdl', :action => 'wsdl'
map.connect 'rails/:controller/:action/:id'

顯示結果

如此當我將一個原本顯示好好的圖片,像是 http://rails.host.com/images/abc.jpg 改成了 http://rails.host.com/rails/images/abc.jpg 之後,他的確可以正常顯示了。

不過,我程式所有的圖片路徑都是直接指定 img src="/images/abc.jpg",所以我的程式裡面的圖片完全無法正確顯示,所以我的程式寫法是無法從 Multi Domain 改成 Signal Domain 的。解決方式就是在 helper 裡面,將所有圖片顯示的地方都用 helper 來幫我顯示。

延伸閱讀
  1. 這裡有一份 Apache + Reverse Proxy + Mongrel 的相同 Domain 不同目錄的設定方式

1 則留言:

syshen 提到...

果真可以 work,煩惱了很久,感謝方法分享。