安徽新华电脑专修学院_安徽电脑培训_安徽电脑培训学校_合肥电脑培训

當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > Lighttpd和RoR安裝配置的疑難解答

Lighttpd和RoR安裝配置的疑難解答
2010-01-14 23:32:31  作者:  來(lái)源:
在Linux平臺(tái)上安裝和配置Ruby on Rails詳解,講述了完整的安裝過(guò)程,本文提供相關(guān)的疑難解答

 

用Lighttpd還是Nginx/Mongrel? Top

現(xiàn)在Nginx/Mongrel的部署方式越來(lái)越受歡迎了,很多人置疑Lighttpd/FastCGI,并且現(xiàn)在也涌現(xiàn)了一些比Mongrel性能更好的例如Thin,ebb等ruby應(yīng)用服務(wù)器,那Lighttpd/FastCGI真的過(guò)時(shí)了嗎?

大家有興趣可以看一下我這篇文章:RoR部署方案深度剖析,Lighttpd提供了很多其他Web服務(wù)器不具備的優(yōu)勢(shì),可以最大化FastCGI的性能,F(xiàn)在Mongrel/Thin/ebb都利用了一些多線程或者事件IO機(jī)制來(lái)提供并發(fā)性能,這是FastCGI所不具備的,但遺憾的是Rails框架是單線程的,最終還是必須單進(jìn)程單線程來(lái)執(zhí)行Rails請(qǐng)求,所以這些并發(fā)優(yōu)勢(shì)無(wú)用武之地。但一些其他Ruby的Web框架例如camping,weavers已經(jīng)開始支持ruby多線程,提供了比Rails好得多的性能,mongrel/ebb只有在這些web框架上面才能發(fā)揮其性能優(yōu)勢(shì)。

所以只要你還是用Rails框架,Lighttpd/FastCGI就是性能最好的部署方案。

ubuntu安裝ruby缺少readline和zlib庫(kù) Top

有些人的ubuntu安裝的庫(kù)不全,比方說(shuō)缺少readline庫(kù),缺少zlib庫(kù),可能會(huì)導(dǎo)致自己手工編譯安裝ruby的失敗,那么就用apt-get先把庫(kù)安裝好。
 

編譯lighttpd的時(shí)候報(bào)告缺少pcre庫(kù) Top

RHEL/CentOS用戶可能要用yum安裝一下pcre/pcre-devel這兩個(gè)庫(kù),ubuntu用戶用apt-get安裝一下,Linux熟手也可以自己下載源代碼編譯安裝,Pcre是Perl兼容的正則表達(dá)式庫(kù),Lighttpd的Rewrite功能需要它。

ubuntu操作系統(tǒng)執(zhí)行rc.lighttpd腳本報(bào)錯(cuò) Top

如果你的Linux是ubuntu,那么需要自己創(chuàng)建啟動(dòng)腳本,lighttpd官方wiki上面已經(jīng)給出來(lái)一個(gè)該腳本示例,地址在:
http://redmine.lighttpd.net/wiki/1/ScriptsUbuntu

rc.lighttpd這個(gè)腳本是針對(duì)SuSE Linux寫的,此外還提供了一個(gè)rc.lighttpd.redhat是針對(duì)RedHat Linux寫的,你自己寫一個(gè)控制腳本,也不過(guò)是舉手之勞:

Java代碼 復(fù)制代碼
  1. #!/bin/sh   
  2.   
  3. case "$1" in    
  4.   start)            
  5.     /usr/local/lighttpd/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf > /dev/null 2>&1  
  6.     ;;   
  7.   stop)    
  8.     killall lighttpd   
  9.     ;;   
  10.   restart)    
  11.    $0 stop   
  12.    sleep 1  
  13.    $0 start    
  14.    ;;   
  15.   *)    
  16.   echo "Usage: lighttpd.sh {start|stop|restart}"    
  17.   ;;    
  18. esac   
  19.   
  20. exit 0   


創(chuàng)建一個(gè)shell腳本,內(nèi)容如上,chmod u+x lighttpd.sh,這個(gè)腳本就可以用來(lái)啟動(dòng)關(guān)閉和重起lighttpd了
 

啟動(dòng)Lighttpd的時(shí)候報(bào)錯(cuò),說(shuō)XXX目錄找不到 Top

Lighttpd啟動(dòng)之后默認(rèn)情況下會(huì)寫access log,error log,如果你啟動(dòng)了壓縮過(guò)程,還會(huì)把文件壓縮過(guò)的版本放在壓縮目錄下面,所以檢查一下你的lighttpd.conf配置文件,是不是這些目錄還沒(méi)有,或者路徑不對(duì)。

lighttpd可以啟動(dòng),但配了Rails就無(wú)法啟動(dòng) Top

如果無(wú)法啟動(dòng)Rails,要學(xué)會(huì)自己看Lighttpd的error log和Rails項(xiàng)目的log目錄下面的fastcgi crash log,在這兩個(gè)log文件當(dāng)中可以找到出錯(cuò)原因。

其中一種常犯的錯(cuò)誤是:Rails項(xiàng)目在Windows上面創(chuàng)建和開發(fā),最后部署到Linux Server上面。這種情況下dispatch.fcgi這個(gè)腳本的ruby解析器路徑是 #!c:/ruby/bin/ruby.exe 這個(gè)路徑在Linux上面肯定是錯(cuò)誤的,你可以改成#!/usr/bin/env ruby,或者干脆在Linux上面創(chuàng)建該Rails項(xiàng)目。

此外在windows上面創(chuàng)建的Rails項(xiàng)目,dispatch.fcgi沒(méi)有可執(zhí)行權(quán)限,這也需要你在Linux上面先賦予可執(zhí)行權(quán)限才行。你可以嘗試著手工運(yùn)行該腳本cd public && ./dispatch.fcgi,看看是否可以運(yùn)行。

啟動(dòng)lighttpd報(bào)錯(cuò),說(shuō)找不到socket路徑 Top

我在前面安裝文檔中給出來(lái)的配置內(nèi)容如下:

Java代碼 復(fù)制代碼
  1. $HTTP["host"] == "www.xxx.com" {   
  2.  server.document-root = "/yourrails/public"  
  3.  server.error-handler-404 = "/dispatch.fcgi"  
  4.  fastcgi.server = (".fcgi" =>   
  5.     ("localhost" =>   
  6.       ("min-procs" => 10,   
  7.        "max-procs" => 10,   
  8.        "socket" => "/tmp/lighttpd/socket/rails.socket",   
  9.        "bin-path" => "/yourrails/public/dispatch.fcgi",   
  10.        "bin-environment" => ("RAILS_ENV" => "production")   
  11.       )   
  12.     )   
  13.  )   
  14. }  


就算照抄你要改改路徑吧?這個(gè)demo當(dāng)中的socket路徑是/tmp/lighttpd/socket/rails.socket,那你要照抄,先檢查一下有沒(méi)有/tmp/lighttpd/sock目錄總是應(yīng)該的吧?其實(shí)用啥路徑都無(wú)妨,關(guān)鍵就是別照抄,領(lǐng)會(huì)原理,根據(jù)自己的環(huán)境做相應(yīng)的調(diào)整。
 

lighttpd正常啟動(dòng)了,但訪問(wèn)Rails出現(xiàn)404 Top

在lighttpd的虛擬域配置里面有一項(xiàng)
Java代碼 復(fù)制代碼
  1. server.error-handler-404 = "/dispatch.fcgi"  

意思是當(dāng)lighttpd找不到URL對(duì)應(yīng)的硬盤文件,就會(huì)調(diào)用Rails的dispatch.fcgi去處理該URL請(qǐng)求,這也是lighttpd訪問(wèn)Rails的主要方式,其性能比URL轉(zhuǎn)發(fā)要快。如果你在配置文件里面忽略了這一行,lighttpd就會(huì)直接返回404錯(cuò)誤,而不是交給Rails處理。
 

多次重起lighttpd以后fastcgi進(jìn)程越來(lái)越多 Top

正常情況下,關(guān)閉Lighttpd以后,dispatch進(jìn)程就會(huì)銷毀,但是在dispatch進(jìn)程處理請(qǐng)求的時(shí)候關(guān)閉lighttpd,dispatch進(jìn)程并不會(huì)馬上關(guān)閉,而是處理完畢當(dāng)前請(qǐng)求,才會(huì)關(guān)閉掉。一些極端情況下,可能會(huì)導(dǎo)致dispatch進(jìn)程一直不關(guān)閉,dispatch進(jìn)程就會(huì)越來(lái)越多。解決辦法很簡(jiǎn)單 killall -9 dispatch.fcgi,只管殺進(jìn)程就好了。

lighttpd和FastCGI部署在不同的服務(wù)器怎么配置 Top

這種情況下,Lighttpd只是連接遠(yuǎn)程服務(wù)器的TCP端口,而不負(fù)責(zé)啟動(dòng)dispatch.fcgi進(jìn)程,因此需要自己寫腳本啟動(dòng)關(guān)閉dispatch.fcgi進(jìn)程。lighttpd提供了一個(gè)spawn-fcgi的程序,可以用來(lái)啟動(dòng)dispatch.fcgi進(jìn)程,監(jiān)聽TCP端口,你可以自己寫一個(gè)shell腳本來(lái)完成這個(gè)工作。另外spawn-fcgi還可以啟動(dòng)dispatch.fcgi進(jìn)程,創(chuàng)建本機(jī)的unix socket端口,和本機(jī)lighttpd通訊,例如:

例如:
Java代碼 復(fù)制代碼
  1. #!/bin/sh   
  2.   
  3. DISPATCH_PATH=/yourrailsapp/public/dispatch.fcgi   
  4. SOCKET_PATH=/tmp/lighttpd/socket   
  5. RAILS_ENV=production   
  6. export RAILS_ENV   
  7.   
  8. case "$1" in   
  9.   
  10.   start)   
  11.     for num in 0 1 2 3 4 5 6 7 8 9  
  12.     do  
  13.      /usr/local/lighttpd/bin/spawn-fcgi -f $DISPATCH_PATH -s $SOCKET_PATH/rails.socket-$num   
  14.     done   
  15.     ;;   
  16.   
  17.   stop)   
  18.     killall -9 dispatch.fcgi   
  19.     ;;   
  20.   
  21.   restart)   
  22.     $0 stop   
  23.     $0 start   
  24.     ;;   
  25.      
  26.   *)    
  27.     echo "Usage: dispatch.sh {start|stop|restart}"  
  28.     ;;   
  29.      
  30. esac   
  31.   
  32. exit 0  


執(zhí)行 ./dispatch.sh start 將啟動(dòng)10個(gè)dispatch.fcgi進(jìn)程,在/tmp/lighttpd/sock目錄下面創(chuàng)建了10個(gè)unix socket文件,然后配置lighttpd去連接這10個(gè)socket文件:

Java代碼 復(fù)制代碼
  1. $HTTP["host"] =~ "www.xxx.com$" {   
  2.   server.document-root = "/yourrails/public"  
  3.   server.error-handler-404 = "/dispatch.fcgi"  
  4.   fastcgi.server = (".fcgi" =>   
  5.     (   
  6.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-0"),   
  7.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-1"),   
  8.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-2"),   
  9.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-3"),   
  10.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-4"),   
  11.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-5"),   
  12.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-6"),   
  13.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-7"),   
  14.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-8"),   
  15.       ("socket"=>"/tmp/lighttpd/socket/rails.socket-9")        
  16.     )   
  17.   )   
  18. }  


這樣做的好處是,每次重新部署應(yīng)用,就不需要重起lighttpd了,只需要執(zhí)行自己的dispatch.sh來(lái)重起dispatch.fcgi進(jìn)程就可以了。同時(shí)也可以很好的解決上一個(gè)fastcgi進(jìn)程堆積的問(wèn)題。

如果遠(yuǎn)程部署,配置方式是一樣的,就是lighttp連接的端口改為:

Java代碼 復(fù)制代碼
  1. ("host"=>"192.168.0.1, "port"=>3001),   
  2. ("host"=>"192.168.0.1, "port"=>3002),   
  3. ......  


dispatch.sh創(chuàng)建dispatch.fcgi進(jìn)程的時(shí)候,使用 -t 參數(shù)創(chuàng)建tcp端口,而不是 -s 創(chuàng)建unix socket文件即可。
 

rails應(yīng)用不在根目錄下,在子目錄下怎么配置 Top

例如你的rails應(yīng)用必須使用某個(gè)網(wǎng)站的子目錄,如:http://www.xxx.com/myapp,那么lighttpd的配置要進(jìn)行相應(yīng)的修改:

Ruby代碼 復(fù)制代碼
  1. $HTTP["host"] == "www.xxx.com" {   
  2.   $HTTP["url"] =~ "^/myapp" {   
  3.     server.document-root = "/home/webroot/demo/public"  
  4.     alias.url = ("/myapp" => "/home/webroot/demo/public")   
  5.     server.error-handler-404 = "/myapp/dispatch.fcgi"  
  6.     fastcgi.server = ("/myapp/dispatch.fcgi" =>   
  7.         ("localhost" =>   
  8.           ("min-procs" => 1,   
  9.            "max-procs" => 10,   
  10.            "socket" => "/tmp/rails.socket",   
  11.            "check-local" => "disable",   
  12.            "bin-path" => "/home/webroot/demo/public/dispatch.fcgi",   
  13.            "bin-environment" => ("RAILS_ENV" => "production")   
  14.           )   
  15.         )   
  16.     )   
  17.   }   
  18. }  


1、要使用$HTTP["url"]去匹配你要訪問(wèn)的子目錄,根據(jù)該子目錄進(jìn)行特定的配置。這樣做的好處是,你可以在一個(gè)虛擬域下面部署多個(gè)rails應(yīng)用,用子目錄分開就可以了。

2、使用alias.url來(lái)指定目錄別名,這可以保證你的靜態(tài)資源例如js,css,images訪問(wèn)路徑是正常的

3、server.error-handler-404 要加上前綴: "/myapp/dispatch.fcgi"

4、在fastcgi配置里面,也要匹配該URL,特別注意,應(yīng)該增加一項(xiàng):"check-local" => "disable"的配置項(xiàng)

在進(jìn)行如上配置以后,lighttpd已經(jīng)可以正常的處理子目錄了,但是Rails的routes仍然無(wú)法正常工作,這需要我們修改Rails的配置文件config/environment.rb,在最后面添加如下代碼:

Ruby代碼 復(fù)制代碼
  1. class ActionController::AbstractRequest   
  2.   def relative_url_root   
  3.     '/myapp'  
  4.   end  
  5. end  


修改Rails處理URL請(qǐng)求的默認(rèn)前綴。

好了,現(xiàn)在你可以打開瀏覽器測(cè)試一下了。
 

我使用了Rails的頁(yè)面緩存,卻不生效 Top

Rails的頁(yè)面緩存機(jī)制本質(zhì)上是動(dòng)態(tài)頁(yè)面靜態(tài)化技術(shù),當(dāng)你第一次訪問(wèn)頁(yè)面的時(shí)候,在public目錄下面生成靜態(tài)頁(yè)面,后續(xù)同樣的請(qǐng)求,Web服務(wù)器將直接返回靜態(tài)頁(yè)面,不再轉(zhuǎn)發(fā)給Rails處理了。那么你如何讓W(xué)eb服務(wù)器知道一個(gè)動(dòng)態(tài)請(qǐng)求的URL應(yīng)該去尋找相應(yīng)的靜態(tài)頁(yè)面呢?這需要在lighttpd里面增加如下的配置:

C代碼 復(fù)制代碼
  1. url.rewrite = ( "^/$" => "index.html""^([^.]+)$" => "$1.html" )  


將所有URL請(qǐng)求統(tǒng)統(tǒng)重寫為后綴.html的靜態(tài)頁(yè)面請(qǐng)求,如果lighttpd找不到該靜態(tài)頁(yè)面,就會(huì)觸發(fā)404,轉(zhuǎn)發(fā)給Rails的dispatch.fcgi處理。但是如果你的Rails應(yīng)用不使用Rails頁(yè)面緩存,則不要寫這個(gè)配置,以免不必要的增加lighttpd的負(fù)擔(dān)和增加處理請(qǐng)求的步驟。

安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 无轴螺旋输送机_双无轴螺旋输送机_垃圾,污泥无轴螺旋输送机-新乡市大汉振动机械有限公司 | 美国SI中国区总代-北京开源国创科技有限公司 | 上海家博会_2025上海家博会时间表_5月31-6月2日_上海家博会门票_免费领取入口 | 液压尾管悬挂器,机械式尾管悬挂器价格,石油套管扶正器厂家,连续油管悬挂器,高压双塞水泥头,免钻塞注水泥分级箍,单塞套管水泥头价格,弹性套管扶正器,铸铝钢性扶正器,钢性套管扶正器厂家 | 土石_泥石分离机_无轴滚筒筛_振动筛 - 巩义市鑫利重工机械制造有限公司 | 网带输送机_皮带_滚筒_链板输送机_不锈钢输送链条生产厂家-宁津县鸿昶机械设备有限公司 | 企业微信服务商-企业微信crm营销|认证-[朝阳企客通]一款企微管家服务型产品 | 精密铸造-不锈钢精密铸件-硅溶胶铸造-常州思泉汽车科技有限公司 精密铸造,精密铸件,不锈钢铸造,不锈钢铸件-常州鸿雁行机械科技有限公司 | 气象站_校园气象站_自动气象站_光伏气象站-山东万象环境科技有限公司 | 内蒙古天奇生物科技有限公司——OEM代工|ODM定制|原料供应|骨肽|片剂|胶囊剂|口服液 | 曙海培训-ZEMAX培训射频培训无线电培训GMS培训EMC培训电磁兼容性培训Maxwell培训欧姆龙培训procast培训可靠性培训光学培训工业机器人培训NI培训Linux培训5G培训Hadoop培训CFD培训 | 原创软文新闻稿-网站SEO文章代写-征文演讲稿代笔-写作阁 | 江西新华电脑学院_南昌新华电脑中专学校_新华电脑培训学校_官方网站 | 武汉牛凸科技有限公司| 智慧环保大数据云平台_车载走航式扬尘/恶臭/噪声污染源在线监测管控信息系统平台_环保土壤/环境监测系统云平台-奥斯恩智能科技 | 南京仁康体检--南京仁康门诊部有限公司| 全棉帆布厂家_加工帆布_涤棉帆布价格_染色帆布定制_广州美丽华皮革帆布-广州美丽华皮革帆布 | 钠长石-硅铁-硅钙-孕育剂-球化剂-安阳李氏实业有限公司 | 土工膜_土工布_复合土工膜_山东土工膜生产厂家_山东路易达新材料有限公司 | 直流电机维修_杭州高压电机修理-杭州先恒机电有限公司 | 生物柴油设备,乙醇精馏塔,醋酸精馏塔生产厂家-无锡弘鼎华化工设备有限公司 | 伸缩接头,限位伸缩接头,传力接头,可拆卸接头,橡胶接头,衬四氟橡胶接头,橡胶软连接,橡胶补偿器,防水套管- 巩义市隆盛管道设备有限公司 | 武汉弹簧-污水厂弹簧-耐高温弹簧-武汉市伟锋弹簧厂 | 智能一体化蒸馏仪_氨氮蒸馏仪_全自动智能蒸馏仪器厂家-那艾 | 呼吸家官网|肺功能检测仪生产厂家|国产肺功能仪知名品牌|肺功能检测仪|肺功能测试仪|婴幼儿肺功能仪|弥散残气肺功能仪|肺功能测试系统|广州红象医疗科技有限公司|便携式肺功能仪|大肺功能仪|呼吸康复一体机|儿童肺功能仪|肺活量计|医用简易肺功能仪|呼吸康复系统|肺功能仪|弥散肺功能仪(大肺)|便携式肺功能检测仪|肺康复|呼吸肌力测定肺功能仪|肺功能测定仪|呼吸神经肌肉刺激仪|便携式肺功能 | 中国江苏国际经济技术合作集团有限公司-致力于做大做强国际工程、国内工程、国际贸易和城镇投资 中国建材信息总网-中国建材行业权威的信息资讯平台 | 烟囱防腐_维修_刷航标_美化_加固_刷色环 | 清洁度检测_手动颗粒萃取设备_自动颗粒萃取设备 - 厦门迈纳光学技术有限公司 | 上饶环亚电脑会计培训学校--电脑学校|上饶电脑学校|上饶电脑培训|会计培训|上饶会计培训|上饶县会计培训|广丰会计培训|玉山会计培训|横峰会计培训|上饶网店培训 上进电缆(嘉兴)股份有限公司官网 - 光伏电缆|防火电缆|电力电缆|铝合金电缆专业生产厂家 | 西安泰富西玛电机_西玛电机_西安西玛电机 | 宁波允泰仪器有限公司-硬度计、拉力试验机、盐雾试验箱、影像测量仪、气动量仪 | 天津佳创博为科技有限公司|AGV控制器|无人搬运车|磁导航传感器|AGV专业零配件 | 徐州恒铭机械设备有限公司_装载机配件_压路机配件_起重机配件_挖掘机配件_配件_徐州恒铭机械设备有限公司 | 漳州市鼎新拍卖有限公司 | 灭菌洗箱机_周转箱清洗机_隧道式洗箱机 - 环速科技有限公司 | 石家庄装修设计_别墅装修装饰公司-金舍装饰官网 | 上海办公室租赁-写字楼出租、创意产业园区厂房招商、孵化器众创联合办公空间出租网 | 泡沫混凝土垫层填充厂家,发泡混凝土垫层填充,轻质混凝土垫层填充厂家,深圳市鸿奥建材发展有限公司 | 主营:回收各类废旧物资,上海巨合物资回收有限公司官方网站 | 江南专汽公司首页-消防车厂家,水罐/泡沫消防车价格(热销品牌) | 辽宁正业集团云顶钢结构有限公司_葫芦岛云顶钢结构_葫芦岛轻钢彩板_葫芦岛钢结构工程 |