Apache2 的 Rails 乘客问题

Posted

技术标签:

【中文标题】Apache2 的 Rails 乘客问题【英文标题】:Rails Passenger problem with Apache2 【发布时间】:2011-09-13 02:21:10 【问题描述】:

我正在尝试使用 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) 的 Passenger。

然后它告诉我在我的 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 已经加载,所以我猜乘客正在运行,但我不知道为什么它没有启动我的应用程序!

提前致谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

我尝试了两种方式,都没有工作。 apache2.conf 不包括 httpd.conf 吗?无论如何感谢您的回答! 是的,你可能是对的。这是在黑暗中拍摄的。关于您所看到的行为的更多信息?当您尝试在浏览器中导航到 URL 时会发生什么?您在 apache 或您的 rails 应用程序日志中看到任何内容吗? 我终于弄清楚了问题所在,乘客现在运行正常。感谢您的帮助! 我什至没有在我的 apache2 文件夹中启用 mods!可以做什么?【参考方案2】:

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

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

Passenger 对使用哪个 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 配置中,警告消失了!

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

【讨论】:

我什至没有在我的 apache2 文件夹中启用 mods!可以做什么? @vishB 有更多详细信息吗?你有没有遵循任何教程?你已经尝试了什么?【参考方案3】:

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

passenger-install-apache2-module

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

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

【讨论】:

【参考方案4】:

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

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

所以你应该做三件事——

    /etc/apache2/mods-available 文件夹中创建一个以.load 结尾的文件。我用passenger.load

    在该文件中粘贴三行并保存文件。

    现在在终端使用sudo a2enmod &lt;module-conf-filename&gt; 来启用模块。就我而言,该文件是passenger.load。所以,我用了

    sudo a2enmod passenger
    

现在,重新启动服务器并使用命令apache2ctl -M 发现passenger 模块已启用。

【讨论】:

以上是关于Apache2 的 Rails 乘客问题的主要内容,如果未能解决你的问题,请参考以下文章

无法启动 Phusion 乘客看门狗?

我在apache中使用乘客的rails时遇到403错误

sh ubuntu 14.04,乘客,apache,rails

通过 Faye 在 Rails 应用程序上进行实时聊天,但通过 Apache 在乘客上进行实时聊天

Rails生产方式的乘客

Rails 应用程序中 nginx 或 apache 的职责是啥?