2010-11-06 89 views
4

我已经在使用Apache和Passenger的Ubuntu服务器上部署了Sinatra应用。通过一些试验和错误,我意识到该应用只有在乘客模块被禁用时才有效。Ruby应用只适用于Passenger被禁用的情况

$ a2dismod passenger 

重启Apache后,应用程序按预期运行。

如果我重新启用该模块...

$ a2enmod passenger 

...我看到在Apache的重启这样的警告:

[warn] module passenger_module is already loaded, skipping 

和应用程序停止工作。 Apache响应,提供虚拟主机文档根目录的内容,但不被Passenger识别。

我很高兴我的应用程序可以工作,但我不确定如何解释启用/禁用乘客模块的反向效果。

回答

4

我遇到了同样的问题:如果你按照这个版本的Apache的乘客安装说明,你可能实际上告诉Apache加载乘客两次。

之前添加3个行到你的Apache配置文件:

LoadModule passenger_module /usr/…/ext/apache2/mod_passenger.so 
PassengerRoot /usr/local/rvm/gems/ruby-1.9.2-p290/gems/passenger-3.0.11 
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.2-p290/ruby 

检查配置文件apache2.conf对于这样的诗句:

# Include module configuration: 
Include /etc/apache2/mods-enabled/*.load 
Include /etc/apache2/mods-enabled/*.conf 

如果这些行存在,它意味着,在开始你的Apache服务器将包括从/ mods-available到/ mods-enabled的每个* .conf和* .load文件,并加载它们。

因此,如果您运行有关警告消息,这意味着您要加载乘客模块两次!

您可以利用这个Apache功能去/ mods-available,寻找passenger.conf和passenger.load文件并编辑它们而不是apache2.conf。

'LoadModule passenger_module'行进入passenger.load,另外两个'PassengerRoot'和'PassengerRuby'行进入passenger.conf。

然后重新启动您的服务器,你会没事的。

更多关于这个问题在这里:http://www.duccioarmenise.net/ruby-on-rails/warn-module-passenger_module-is-already-loaded/

+0

Apache将在启动时明确不复制和配置文件。相反,你应该在'mods-available'中创建符号链接,指向'mods-available'中的文件。有两个助手脚本'a2enmod'和'a2dismod'就是这么做的。 – 2012-09-04 10:59:09

+0

你是对的,我用错了词,只是纠正。我想你想说的是“......在'mods-enabled'中创建符号链接,指向'mods-available'中的文件。 – Darme 2012-09-04 12:12:04

0

这很可能意味着您已经指定了'LoadModule passenger_module ...'两次。第一个入口不在passenger.conf中,第二个入口在passenger.conf中。

+0

我包括站点特定的Apache配置文件中的LoadModule指令。它必须是第二次出现,但是当我删除它时,配置文件中剩下的Passenger相关指令无法识别。例如,PassengerRoot,PassengerRuby,PassengerDefaultUser,RackEnv现在在重新启动Apache时会导致语法错误。 – grough 2010-11-07 19:50:49

+0

这是因为Phusion Passenger现在没有加载,或者在设置Passenger选项后加载。您必须确保1)Phusion Passenger只加载一次,2)在LoadModule之后指定Passenger选项。 – Hongli 2010-11-08 09:05:12

相关问题