我无法让 Ruby on Rails + Passenger + Apache 运行

我无法让 Ruby on Rails + Passenger + Apache 运行

如果这个问题很愚蠢,我很抱歉,但我无法让 Ruby on Rails 在我的 Apache 服务器上运行。我正在使用 Phusion Passenger (mod_rails、mod_rack) 进行应用程序部署。这是我网站的 Apache 配置文件中特定于 RoR 的配置代码:

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

再次强调,我对这类事情确实知之甚少;我以前从未从头开始设置服务器。无论如何,如您所见,我的 rails 应用程序位于/var/www/syyborg.com/ruby/blog/。我正尝试从 访问它http://[my domain, syyborg.com]/rails。但是,当我尝试加载网站时,我收到“403 Forbidden”错误。任何帮助都将不胜感激,如果需要,我可以提供进一步的详细信息。提前致谢!

答案1

如果 mod_rails 正确安装并加载,你唯一需要做的配置需要在 apache 中,将文档根目录指向公共文件夹。mod_rails 足够聪明,可以知道其余部分来自哪里。在 apache 中:<Directory> 语句指的是物理文件位置,而不是感知路径。这应该成为你的 rails 应用程序的公共文件夹。

IE

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

并且你的 RailsBaseURI 应该是你想要使用的路径。

IE

RailsBaseURI "/rails"

您的别名声明看起来不错。

答案2

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

gem install passenger

passenger-install-apache2-module

尝试看看是否可以像这样自行启动乘客:

cd /path/to/your/webapp
passenger start

答案3

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

基本上,乘客需要设置两项配置设置:

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

因此假设您的DocumentRoot/srv/www,您需要创建以下符号链接:

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

请注意,最好不要将 rails 应用放入 中DOCUMENT_ROOT。此外,Passenger 目前不支持 VirtualDocumentRoot 模块。

欲了解更多信息,请参阅乘客文件

相关内容