Apache上的乘客:"似乎没有运行",app页面给出了403;接下来是什么?

时间:2014-05-12 21:35:04

标签: ruby-on-rails apache passenger

我无法让我的网络服务器与Ruby on Rails中的应用程序通信。这特别令人沮丧,因为我去年工作了几个月;我认为在此期间某些设置在升级过程中发生了变化,但我找不到它。

症状:当我导航到应该为app提供服务的页面(主域的子URI)时,Apache会发出403错误:“没有索引文档或者目录是读保护的。 ”。此错误页面的底部给出了配置字符串“Apache / 2.4.9(Unix)OpenSSL / 1.0.1g Phusion_Passenger / 4.0.37”,这似乎表明Passenger已加载并正在运行。如果我直接导​​航到公共目录或应用程序所在的物理目录,Apache会愉快地显示该目录的文件列表(如果我点击任何文件,它们会显示),所以它似乎没有是那种权限问题,至少。

在httpd.conf文件中,有以下行加载Passenger:

LoadModule passenger_module modules/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-2.0.0-p247/gems/passenger-4.0.14
PassengerDefaultRuby /usr/local/rvm/wrappers/ruby-2.0.0-p247/ruby
PassengerEnabled Off
PassengerLogLevel 3

以及之后的以下几行告诉Apache有关该应用的信息:

<Location "/pathtoapp/f13">
  Options +Indexes +ExecCGI +FollowSymLinks -MultiViews
  Order allow,deny
  Require all granted

  PassengerEnabled On
  RackBaseURI /pathtoapp/f13
  #RailsEnv production
  RailsEnv development
</Location>

应用程序本身位于/pathtoapp/f13app,文件系统中有/pathtoapp/f13/pathtoapp/f13app/public的符号链接。如果我创建一个符号链接/pathtoapp/test/pathtoapp/f13app/public,它工作正常(因为它显示了公共目录的文件列表,所以再次,没有权限问题)。

我尝试根据网络搜索可能的解决方案来改变一些事情。大多数似乎没有影响任何东西,所以我还原它们;我确实注意到将Location更改为Directory意味着在我的浏览器中导航到/pathtoapp/f13会给我公共目录的文件列表。

我尝试(重新)运行sudo passenger-install-apache2-module,即使Apache错误似乎表明已经安装了乘客。它(重新?)安装并提示对httpd.conf进行一些更改,现在有了:

LoadModule passenger_module /usr/lib/ruby/gems/2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/lib/ruby/gems/2.1.0/gems/passenger-4.0.37
  PassengerDefaultRuby /usr/bin/ruby
</IfModule>

(我不确定乘客是否将ruby升级到/ usr / lib或者是否在早期的系统更新中出现过,但是指示的文件确实存在。)后来在httpd.conf中,基于在http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rack_to_sub_uri的当前文本中,我现在有

Alias /pathtoapp/f13 /pathtoapp/f13app/public
<Location "/pathtoapp/f13">
  PassengerBaseURI /pathtoapp/f13
  PassengerAppRoot /pathtoapp/f13app
  PassengerEnabled On

  RailsEnv development
</Location>
<Directory "/pathtoapp/f13app/public">
  Options +Indexes +ExecCGI +FollowSymLinks -MultiViews
  Allow from all
  Require all granted
</Directory>

然后我将文件内系统符号链接从f13删除到f13app/public。当然,我已经重新启动了httpd。

passenger-status仍然报告“错误:Phusion Passenger似乎没有运行。”,导航到应用程序的页面(/pathtoapp/f13)仍然会出现相同的403错误。我现在完全不知道接下来要尝试什么,甚至我应该用什么诊断工具来帮助分类问题。有什么想法吗?

(额外系统信息:uname -r是“3.14.1-1-ARCH”; apachectl -v是“Apache / 2.4.9(Unix)”; passenger -v是“Phusion Passenger”版本4.0.37“)

1 个答案:

答案 0 :(得分:1)

经过一段时间的批次之后,我终于发现问题出在Apache配置本身上:Apache甚至还没有达到与Passenger交谈的程度。具体来说,就行了

Alias /pathtoapp/f13 /pathtoapp/f13app/public

PassengerAppRoot /pathtoapp/f13app

pathtoapp相对于文件系统而不是URI是很重要的。所以这两行应该更像是

Alias /pathtoapp/f13 /srv/http/htdoc/pathtoapp/f13app/public

PassengerAppRoot /srv/http/htdoc/pathtoapp/f13app

当然,具体细节因系统而异。我不确定这是Apache 2.2-2.4升级的问题还是别的(我有root访问权限但不是这个系统上的主要系统管理员),但是现在我发现了问题,我不想要把问题挂起来。我还要添加Apache配置行

LogLevel debug

非常有助于我找出问题所在的系统组件。