如果这个问题很愚蠢,我很抱歉,但我无法让 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
您的虚拟主机。
基本上,乘客需要设置两项配置设置:
- 它需要知道哪个URL 路径应该是一个 rails 应用程序。这可以通过
RailsBaseURI
在 Apache 配置中设置值来完成。 - 它需要知道 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 模块。
欲了解更多信息,请参阅乘客文件。