我不能让Ruby on Rails + Passenger + Apache工作

我很抱歉,如果这是一个愚蠢的问题,但我不能让Ruby on Rails在我的Apache服务器上工作。 我正在使用Phusion Passenger(mod_rails,mod_rack)进行应用程序部署。 这是我的网站的Apacheconfiguration文件中的RoR特定的configuration代码:

Alias /rails /var/www/syyborg.com/ruby/blog/public <Directory /var/www/syyborg.com/ruby/blog/public> Options FollowSymLinks AllowOverride None Order Allow,Deny Allow from All </Directory> RailsBaseURI /rails 

我再次对这种事情了解甚less, 我从来没有从头开始build立一个服务器。 无论如何,正如你所看到的,我的rails应用程序位于/var/www/syyborg.com/ruby/blog/ 。 我试图从http://[my domain, syyborg.com]/rails访问它。 但是,当我尝试加载该网站时,出现“403 Forbidden”错误。 任何帮助将不胜感激,如果需要,我可以提供进一步的细节。 提前致谢!

如果mod_rails被正确地安装并加载,你需要在apache中唯一的configuration是将文档根目录指向公用文件夹。 mod_rails足够聪明,可以实现其余的来源。 在apache中:<Directory>语句指的是物理文件的位置而不是感知的path。 这应该是您的Rails应用程序的公用文件夹。

 <Directory /var/www/syyborg.com/ruby/blog/public> Options FollowSymLinks AllowOverride None Order Allow,Deny Allow from All </Directory> 

你的RailsBaseURI应该是你正在使用的path。

 RailsBaseURI "/rails" 

你的别名语句看起来不错。

这听起来像mod_rails没有安装。 假设你有这个:

 gem install passenger 

 passenger-install-apache2-module 

尝试看看你是否可以像这样开始乘客:

 cd /path/to/your/webapp passenger start 

乘客使用一些文件系统魔法来find实际的Rails应用程序。 其所有操作都基于您的虚拟主机的DocumentRoot

基本上,乘客需要两个configuration设置:

  1. 它需要知道哪个URLpath应该是一个rails应用程序。 这是通过在Apacheconfiguration中设置RailsBaseURI值来完成的。
  2. 它需要知道Rails应用程序在文件系统中的位置。 这里它使用了一个相当特殊的方法。 即指向你的Rails应用程序的公共目录(而不是RAILS_ROOT )的符号链接。 这个符号链接需要位于DOCUMENT_ROOT目录中。

所以假设你的DocumentRoot/srv/www ,你需要创build下面的符号链接:

 ln -s /var/www/syyborg.com/ruby/blog/public /srv/www/rails 

请注意,不要将您的rails应用程序放入DOCUMENT_ROOT ,这是很好的做法。 此外,Passenger当前不支持VirtualDocumentRoot模块。

有关更多信息,请参阅Passenger文档的相应部分。