21

我正在尝试使用 apache2 和 mod_rails(Phusion Passenger)在 ubuntu10.10 上的 rails 服务器上设置一个 ruby​​。

我已经安装了 ruby​​ 1.9.2-p0 和 rails 3.0.8 并安装了带有 Passenger-install-apache2-module 和乘客 gem (v3.0.7) 的乘客。

然后它告诉我在我的 Apache 配置文件中添加 3 行。所以我将这些行添加到'/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。但我没有从中得到任何错误。

服务器应该只能通过 LAN 访问。当我访问服务器时,我看到我的应用程序公用文件夹中的所有文件和目录,但应用程序本身没有启动。

当我重新启动 apache 时,它​​告诉我 mod_rails 已经加载,所以我猜乘客正在运行,但我不知道为什么它没有启动我的应用程序!

提前致谢!

4

4 回答 4

39

mod_passenger.so 不存在的原因是因为您没有安装 Apache 模块。执行:

passenger-install-apache2-module

这将在您的 gem 目录中创建 mod_passenger.so 文件,并为您提供三行复制到您的 apache2.conf 文件中。

乘客模块安装在您当前的 gemset 中,因此您不应该在项目之间遇到任何冲突。您可以使用任何兼容版本的 Ruby,以及您喜欢的任何 gemset,通过 RVM,也可能通过 RBENV。这为从一个版本的 Ruby 升级到下一个版本提供了一条非常简单的升级路径。

于 2012-09-19T15:26:03.003 回答
12

我终于弄清楚了问题所在:我搞砸了我的 ruby​​ 安装。

在 /usr/local/ 我安装了 ruby​​1.9.2-p0 (这是我想使用的版本),但在 /usr/ 我安装了 ruby​​1.8.7。

乘客对使用哪个 ruby​​ 版本感到困惑,所以我将 apache2/mods-enabled/passenger.load 和 .config 中的 LoadModule、PassengerRoot 和 PassengerRuby 路径更改为正确的路径,它终于奏效了!这两个文件都是自动创建的,这也导致了重新定义的问题:在 apache 启动时出现警告“mod_passenger 已加载”。所以我删除了

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配置中,警告消失了!

也许有一天这会帮助别人!

于 2011-06-13T18:05:28.493 回答
3

我今天遇到了一个更清洁的解决方案。这可能对未来的用户有所帮助。命令 -

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. .load创建一个以in文件夹结尾的/etc/apache2/mods-available文件。我用过passenger.load

  2. 将三行粘贴到该文件中并保存文件。

  3. Now in terminal use sudo a2enmod <module-conf-filename> to enable the module. In my case, the file was, passenger.load. So, I used

    sudo a2enmod passenger
    

Now, restart the server and use the command apache2ctl -M to find that passenger module is enabled.

于 2015-08-10T14:05:21.920 回答
1

我认为他们希望你把这三行放在你的 httpd.conf 文件中,而不是放在你的 apache2.conf 中。至少我一直都是这样做的。

于 2011-06-12T02:55:22.953 回答