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/ 我安装了 ruby1.9.2-p0(这是我想使用的版本),但在 /usr/ 我安装了 ruby1.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 <module-conf-filename>
来启用模块。就我而言,该文件是passenger.load
。所以,我用了
sudo a2enmod passenger
现在,重新启动服务器并使用命令apache2ctl -M
发现passenger
模块已启用。
【讨论】:
以上是关于Apache2 的 Rails 乘客问题的主要内容,如果未能解决你的问题,请参考以下文章
sh ubuntu 14.04,乘客,apache,rails