麻豆传媒视频在线,国产91精品不卡视频,欧美jizz19性欧美,污视频网站在线观看,91涩漫在线观看,伊人发布在线,九色porny丨首页在线,福利视频一区,久久av网址,久久人人视频

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > Lighttpd和RoR安裝配置的疑難解答

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

 

用Lighttpd還是Nginx/Mongrel? Top

現在Nginx/Mongrel的部署方式越來越受歡迎了,很多人置疑Lighttpd/FastCGI,并且現在也涌現了一些比Mongrel性能更好的例如Thin,ebb等ruby應用服務器,那Lighttpd/FastCGI真的過時了嗎?

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

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

ubuntu安裝ruby缺少readline和zlib庫 Top

有些人的ubuntu安裝的庫不全,比方說缺少readline庫,缺少zlib庫,可能會導致自己手工編譯安裝ruby的失敗,那么就用apt-get先把庫安裝好。
 

編譯lighttpd的時候報告缺少pcre庫 Top

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

ubuntu操作系統執行rc.lighttpd腳本報錯 Top

如果你的Linux是ubuntu,那么需要自己創建啟動腳本,lighttpd官方wiki上面已經給出來一個該腳本示例,地址在:
http://redmine.lighttpd.net/wiki/1/ScriptsUbuntu

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

Java代碼 復制代碼
  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   


創建一個shell腳本,內容如上,chmod u+x lighttpd.sh,這個腳本就可以用來啟動關閉和重起lighttpd了
 

啟動Lighttpd的時候報錯,說XXX目錄找不到 Top

Lighttpd啟動之后默認情況下會寫access log,error log,如果你啟動了壓縮過程,還會把文件壓縮過的版本放在壓縮目錄下面,所以檢查一下你的lighttpd.conf配置文件,是不是這些目錄還沒有,或者路徑不對。

lighttpd可以啟動,但配了Rails就無法啟動 Top

如果無法啟動Rails,要學會自己看Lighttpd的error log和Rails項目的log目錄下面的fastcgi crash log,在這兩個log文件當中可以找到出錯原因。

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

此外在windows上面創建的Rails項目,dispatch.fcgi沒有可執行權限,這也需要你在Linux上面先賦予可執行權限才行。你可以嘗試著手工運行該腳本cd public && ./dispatch.fcgi,看看是否可以運行。

啟動lighttpd報錯,說找不到socket路徑 Top

我在前面安裝文檔中給出來的配置內容如下:

Java代碼 復制代碼
  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. }  


就算照抄你要改改路徑吧?這個demo當中的socket路徑是/tmp/lighttpd/socket/rails.socket,那你要照抄,先檢查一下有沒有/tmp/lighttpd/sock目錄總是應該的吧?其實用啥路徑都無妨,關鍵就是別照抄,領會原理,根據自己的環境做相應的調整。
 

lighttpd正常啟動了,但訪問Rails出現404 Top

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

意思是當lighttpd找不到URL對應的硬盤文件,就會調用Rails的dispatch.fcgi去處理該URL請求,這也是lighttpd訪問Rails的主要方式,其性能比URL轉發要快。如果你在配置文件里面忽略了這一行,lighttpd就會直接返回404錯誤,而不是交給Rails處理。
 

多次重起lighttpd以后fastcgi進程越來越多 Top

正常情況下,關閉Lighttpd以后,dispatch進程就會銷毀,但是在dispatch進程處理請求的時候關閉lighttpd,dispatch進程并不會馬上關閉,而是處理完畢當前請求,才會關閉掉。一些極端情況下,可能會導致dispatch進程一直不關閉,dispatch進程就會越來越多。解決辦法很簡單 killall -9 dispatch.fcgi,只管殺進程就好了。

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

這種情況下,Lighttpd只是連接遠程服務器的TCP端口,而不負責啟動dispatch.fcgi進程,因此需要自己寫腳本啟動關閉dispatch.fcgi進程。lighttpd提供了一個spawn-fcgi的程序,可以用來啟動dispatch.fcgi進程,監聽TCP端口,你可以自己寫一個shell腳本來完成這個工作。另外spawn-fcgi還可以啟動dispatch.fcgi進程,創建本機的unix socket端口,和本機lighttpd通訊,例如:

例如:
Java代碼 復制代碼
  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  


執行 ./dispatch.sh start 將啟動10個dispatch.fcgi進程,在/tmp/lighttpd/sock目錄下面創建了10個unix socket文件,然后配置lighttpd去連接這10個socket文件:

Java代碼 復制代碼
  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. }  


這樣做的好處是,每次重新部署應用,就不需要重起lighttpd了,只需要執行自己的dispatch.sh來重起dispatch.fcgi進程就可以了。同時也可以很好的解決上一個fastcgi進程堆積的問題。

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

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


dispatch.sh創建dispatch.fcgi進程的時候,使用 -t 參數創建tcp端口,而不是 -s 創建unix socket文件即可。
 

rails應用不在根目錄下,在子目錄下怎么配置 Top

例如你的rails應用必須使用某個網站的子目錄,如:http://www.xxx.com/myapp,那么lighttpd的配置要進行相應的修改:

Ruby代碼 復制代碼
  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"]去匹配你要訪問的子目錄,根據該子目錄進行特定的配置。這樣做的好處是,你可以在一個虛擬域下面部署多個rails應用,用子目錄分開就可以了。

2、使用alias.url來指定目錄別名,這可以保證你的靜態資源例如js,css,images訪問路徑是正常的

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

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

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

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


修改Rails處理URL請求的默認前綴。

好了,現在你可以打開瀏覽器測試一下了。
 

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

Rails的頁面緩存機制本質上是動態頁面靜態化技術,當你第一次訪問頁面的時候,在public目錄下面生成靜態頁面,后續同樣的請求,Web服務器將直接返回靜態頁面,不再轉發給Rails處理了。那么你如何讓Web服務器知道一個動態請求的URL應該去尋找相應的靜態頁面呢?這需要在lighttpd里面增加如下的配置:

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


將所有URL請求統統重寫為后綴.html的靜態頁面請求,如果lighttpd找不到該靜態頁面,就會觸發404,轉發給Rails的dispatch.fcgi處理。但是如果你的Rails應用不使用Rails頁面緩存,則不要寫這個配置,以免不必要的增加lighttpd的負擔和增加處理請求的步驟。

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
午夜亚洲性色福利视频| 一个色综合导航| 久久久久久黄色| 99久久精品国产一区| 狠狠色狠狠色综合| 国产尤物一区二区| 成人一区在线看| 91免费看`日韩一区二区| 26uuu久久天堂性欧美| 91丝袜国产在线播放| 国产亚洲va综合人人澡精品| 久久精品夜色噜噜亚洲a∨| 国产视频一区在线播放| 综合久久国产九一剧情麻豆| 亚洲免费在线视频一区 二区| 日韩美女久久久| 欧美午夜无遮挡| 欧美精品tushy高清| 欧美一区二区不卡视频| 精品乱人伦小说| 亚洲男人天堂网| 麻豆国产精品va在线观看不卡| 九九久久精品一区| 国产成人精品一区二区在线| 日本超碰一区二区| 天天综合91| 欧美亚洲色图校园春色| 精品国产乱码久久久| 欧美人成网站| 麻豆精品国产传媒mv男同| 国产老女人精品毛片久久| 日本一本视频| 免费看欧美女人艹b| 精品福利av导航| 蜜桃视频欧美| 日韩天堂在线视频| 麻豆国产欧美日韩综合精品二区| 91精品国产一区二区人妖| 日日夜夜综合| 欧美在线一区二区三区| а√在线天堂官网| 欧美性大战xxxxx久久久| 久久影院资源站| 国产精品99久久久久久www| 免费永久网站黄欧美| 日本福利在线| 亚洲欧洲精品天堂一级| 在线免费黄色| 欧美日产国产精品| 一区免费视频| 国产成人精品综合| 亚洲国产裸拍裸体视频在线观看乱了 | 一本色道久久综合狠狠躁篇的优点 | xvideos亚洲人网站| 欧美成人性生活| 一级黄色av| 黄色大片在线| 国产va免费精品观看精品视频 | 欧美日韩黄色一区二区| 中文字幕亚洲无线码a| 成人精品一区二区三区电影免费 | 国产丝袜在线精品| 亚洲在线资源| 日本一本视频| 欧美日韩成人影院| 极品尤物久久久av免费看| 26uuu精品一区二区在线观看| 色婷婷久久久综合中文字幕| 日韩中文在线中文网在线观看 | 电影k8一区二区三区久久 | 精品国产乱码久久久久久影片| 97婷婷涩涩精品一区| 永久av在线| 先锋影音国产精品| 成人性视频网站| 777奇米成人网| 国产成人精品久久二区二区91| 日本一级理论片在线大全| 日本激情一区| www.欧美日韩国产在线| 91麻豆精品国产无毒不卡在线观看 | 国产在线不卡| 综合婷婷亚洲小说| 日韩资源在线观看| 成人免费在线观看| 秋霞欧美视频| 亚洲少妇最新在线视频| 色偷偷偷亚洲综合网另类| 成人高清免费观看mv| 秋霞蜜臀av久久电影网免费 | 免费成人在线影院| 欧美日韩国产成人在线免费| 国产一区玩具在线观看| 成人在线视频区| 国产成人av电影| 日韩国产高清污视频在线观看| 先锋av资源在线| av亚洲免费| 一区二区三区 在线观看视频| 欧美男插女视频| 天堂√中文最新版在线| 日韩国产欧美在线播放| 欧美高清视频在线高清观看mv色露露十八 | 国产精品自拍av| 欧美高清在线一区二区| 国产小视频国产精品| 色综合色综合久久综合频道88| 国产精品久久久久久精| 亚洲午夜免费| 日韩欧美一区二区三区免费看| 99a精品视频在线观看| 欧美成人精品| 亚洲午夜精品17c| h动漫在线视频| 久久久成人av毛片免费观看| 麻豆久久精品| 亚洲人成77777在线观看网| 亚洲午夜久久久影院| 欧美色片在线观看| 一区二区三区在线视频观看58| 欧美精品在线视频观看| 2021年精品国产福利在线| 日本一区二区高清不卡| 久久久亚洲午夜电影| 综合激情国产一区| 嫩草在线视频| 免费视频亚洲| 亚洲精品老司机| 国产精欧美一区二区三区| 99九九99九九九视频精品| 亚洲视频精品在线| 国产精品25p| 精品电影在线观看| 久久av资源网站| 久久久国产一区二区三区| 美女精品在线观看| 欧美日本一道本| 国产成人精品一区二区| 久久精品国产免费看久久精品| 一本大道av一区二区在线播放| 五月婷婷久久丁香| 亚州黄色一级| 欧美日韩1区| 精品国产成人系列| 中文字幕乱码中文乱码51精品| 波多野结衣在线aⅴ中文字幕不卡| 久久久久久久国产| 国内成人自拍| 欧美一二三区在线观看| gogo久久| 中文字幕日本乱码精品影院| 日日噜噜夜夜狠狠视频| 午夜一区不卡| 美女久久久久久久| 免费久久精品| 日韩一级免费观看| 欧美123区| 亚洲成人777| 国产写真视频在线观看| www.66久久| 理论片播放午夜国外| 久久在线91| 久久噜噜噜精品国产亚洲综合| 免费成人网www| 欧美一级欧美三级| 国产亚洲人成a在线v网站| 亚洲成av人影院在线观看网| av在线电影网| 久久久久久9999| 在线91av| 99riav一区二区三区| 95影院理论片在线观看| 精品一区二区在线视频| 欧美一级片久久久久久久| 亚洲天堂男人| 久久久免费高清电视剧观看| 香蕉综合视频| 精品国产一区久久久| 郴州新闻综合频道在线直播| 亚洲精品久久久久久久久久久| 亚洲超碰在线观看| 日韩色视频在线观看| 精品国产伦一区二区三区观看说明| 91国偷自产一区二区使用方法| 午夜裸体女人视频网站在线观看| 波多野结衣在线高清| 国产传媒欧美日韩成人| 久久精品中文字幕一区| 在线播放一区二区精品视频| 欧美写真视频网站| 欧亚一区二区| 成人国产电影网| 国产欧美日韩91| 久久蜜桃一区二区| 在线观看电影av| 亚洲va在线va天堂| 1024国产在线| 成人激情小说网站| 国产美女久久久| 国精品**一区二区三区在线蜜桃|