2011-06-11 65 views
19

我試圖在ubuntu10.10上用apache2和mod_rails(Phusion Passenger)在Rails服務器上設置ruby。Rails Apache2的乘客問題

我已經安裝了ruby 1.9.2-p0和rails 3.0.8,並且安裝了passenger-install-apache2-module和passenger gem(v3.0.7)的Passenger。

然後它告訴我添加3行到我的Apache配置文件。所以我說這行 '/etc/apache2/apache2.conf中':

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so 
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7 
PassengerRuby /usr/local/bin/ruby 

我編輯我的 '/etc/apache2/httpd.conf' 並補充說:

NameVirtualHost *:80 

<VirtualHost *:80> 
ServerName 192.168.0.2 
DocumentRoot /var/www/webop/public 

<Directory /var/www/webop/public> 
Allow from all 
Options -MultiViews 
</Directory> 
</VirtualHost> 

我也發現/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/中的文件mod_passenger.so實際上不存在,它的名字是mod_passenger.c。但是我從中得不到任何的錯誤。

只能通過局域網訪問服務器。當我訪問服務器時,我看到了應用程序公用文件夾中的所有文件和目錄,但應用程序本身並未開始。

當我重新啓動apache時,它告訴我mod_rails已經加載了,所以我猜這個乘客正在運行,但我無法弄清楚它爲什麼不啓動我的應用程序!

在此先感謝!

回答

12

我終於明白了問題所在:我搞砸了我的紅寶石安裝。

在/ usr/local /我安裝了ruby1.9.2-p0(這是我想使用的版本),但在/ usr /我安裝了ruby1.8.7。

乘客混淆了哪個ruby版本使用,所以我將apache2/mods-enabled/passenger.load和.config中的LoadModule,PassengerRoot和PassengerRuby路徑更改爲正確的路徑,並最終奏效!這兩個文件都是自動創建的,這也導致了重新定義的問題:在apache啓動時出現警告'mod_passenger already loaded'。所以我刪除

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.7/ext/apache2/mod_passenger.so 
PassengerRoot /usr/local/lib/gems/1.9.1/gems/passenger-3.0.7 
PassengerRuby /usr/local/bin/ruby 

從apache配置和警告消失了!

也許這將有助於別人有一天!

+1

我甚至沒有在我的apache2文件夾中啓用mods!可以做些什麼? – vishB 2013-02-01 07:18:03

+0

@vishB更多詳情?你遵循任何教程嗎?你已經嘗試過了什麼? – 2013-02-01 13:52:40

1

我想他們希望你把這三行放在你的httpd.conf文件中,而不是放在你的apache2.conf中。至少我是這麼做的。

+0

我試過兩種方法,都沒有奏效。 apache2.conf中沒有包含httpd.conf?無論如何感謝您的回答! – 2011-06-12 09:52:02

+0

是的,你可能是對的。這是在黑暗中拍攝的。有關您所看到的行爲的更多信息?當您嘗試導航到瀏覽器中的網址時會發生什麼?你有沒有在Apache或你的Rails應用程序日誌中看到任何東西? – dpb 2011-06-12 22:38:50

+0

我終於搞清楚問題是什麼,乘客現在正常運行。謝謝你的幫助! – 2011-06-13 18:07:13

34

mod_passenger.so不存在的原因是因爲您尚未安裝Apache模塊。執行:

passenger-install-apache2-module 

這將創建你的寶石目錄中的文件mod_passenger.so,給你三線複製到apache2.conf文件。

乘客模塊安裝在您當前的gemset中,因此您不應該在項目之間發生任何衝突。您可以使用任何兼容版本的Ruby,以及任何您喜歡的gemset,通過RVM,也可能使用RBENV。這使得從一個Ruby版本到另一個版本的升級路徑變得非常簡單。

+0

這可能也有用https://rvm.io/integration/passenger/ – carnator 2013-01-15 06:37:47

2

今天我遇到了一個更清潔的解決方案。這可能有助於未來的用戶。該命令 -

passenger-install-apache2-module 

告訴我把這三行放在apache配置文件中。

LoadModule passenger_module /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59/buildout/apache2/mod_passenger.so 
    <IfModule mod_passenger.c> 
    PassengerRoot /home/anwar/.rvm/gems/ruby-2.2.0/gems/passenger-4.0.59 
    PassengerDefaultRuby /home/anwar/.rvm/gems/ruby-2.2.0/wrappers/ruby 
    </IfModule> 

但是,該配置文件在哪裏?答案是配置文件分成很多部分,它們駐留在/etc/apache2/mods-available

所以,你應該做的三件事 -

  1. 創建/etc/apache2/mods-available文件夾.load結尾的文件。我用passenger.load

  2. 將三行粘貼到該文件中並保存該文件。

  3. 現在在終端中使用sudo a2enmod <module-conf-filename>來啓用模塊。在我的情況下,該文件是,passenger.load。所以,我用

    sudo a2enmod passenger 
    

現在,重新啓動服務器,然後使用命令apache2ctl -M發現passenger模塊啓用。