我无法让我的网络服务器与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“)
答案 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
非常有助于我找出问题所在的系统组件。