Ruby应用程序仅在乘客为;残疾人士;

Ruby应用程序仅在乘客为;残疾人士;,ruby,apache2,sinatra,passenger,Ruby,Apache2,Sinatra,Passenger,我使用Apache和Passenger在Ubuntu服务器上部署了一个Sinatra应用程序。通过一些尝试和错误,我意识到应用程序只有在乘客模块被禁用时才能工作 $ a2dismod passenger Apache重启后,应用程序按预期运行 如果我重新启用模块 $ a2enmod passenger …我在Apache重新启动时看到此警告: [warn] module passenger_module is already loaded, skipping 应用程序停止工作。Apache

我使用Apache和Passenger在Ubuntu服务器上部署了一个Sinatra应用程序。通过一些尝试和错误,我意识到应用程序只有在乘客模块被禁用时才能工作

$ a2dismod passenger
Apache重启后,应用程序按预期运行

如果我重新启用模块

$ a2enmod passenger
…我在Apache重新启动时看到此警告:

[warn] module passenger_module is already loaded, skipping
应用程序停止工作。Apache响应,提供vhost文档根目录的内容,但乘客无法识别


我很高兴我的应用程序能工作,但我不知道如何解释启用/禁用乘客模块的相反效果。

这很可能意味着您已经指定了“LoadModule乘客模块…”两次。第一个条目不在passenger.conf中,第二个条目在passenger.conf中。

我遇到了相同的问题:如果您使用此版本的Apache按照passenger安装说明进行安装,您实际上可能会告诉Apache加载passenger两次

在将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中的每个*.conf和*.load文件,并将其加载到启用了/mods的/mods中

因此,如果您在相关警告消息中运行,则表示您正在加载乘客模块两次

您可以利用Apache的这一特性转到可用的/mods,查找passenger.conf和passenger.load文件并编辑它们,而不是apache2.conf

“LoadModule passenger_module”行进入passor.load,而其他2条“PassengerRoot”和“PassengerRuby”行进入passor.conf

然后重启你的服务器,你就会没事了


有关此问题的更多信息,请参见:

I在特定于站点的Apache配置文件中包含LoadModule指令。它必须是第二次出现,但当我删除它时,配置文件中剩余的乘客相关指令无法识别。例如,PassengerRoot、PassengerRuby、PassengerDefaultUser、RackNV现在在重新启动Apache时会导致语法错误。这是因为现在根本没有加载Phusion Passenger,或者在设置Passenger选项后加载。您必须确保1)仅加载一次Phusion Passenger,2)在LoadModule之后指定Passenger选项。Apache在启动时绝对不会复制和配置文件。相反,您应该在
mods available
中创建符号链接,指向
mods available
。有两个助手脚本
a2enmod
a2dismod
正是这样做的。你是对的,我用错了词,刚刚更正。我猜你想说“…在
mods-enabled
中创建符号链接,指向
mods-available
中的文件”。