我需要一些帮助,让 Rails 3.2 应用程序在 cPanel 配置的 Apache 站点的子 uri 中工作。我已按照 Passenger 文档和各种博客文章中的步骤进行操作。根操作渲染得很好,但每个其他请求都会给我一个 404。
我认为这是 Apache 配置中的内容,而不是 Rails 配置中的内容,因为它不是 Rails 应用程序的 404 页面,并且 404 不会在 Rails 日志中留下痕迹。
这是 httpd.conf 中的 vhost 部分,由 cPanel 生成:
<VirtualHost myip:443>
ServerName mysite.org
ServerAlias www.mysite.org
DocumentRoot /home/myuser/public_html
ServerAdmin <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="85f2e0e7e8e4f6f1e0f7c5e8fcf6ecf1e0abeaf7e2" rel="noreferrer noopener nofollow">[email protected]</a>
UseCanonicalName Off
Options -ExecCGI -Includes
RemoveHandler cgi-script .cgi .pl .plx .ppl .perl
CustomLog /usr/local/apache/domlogs/mysite.org combined
CustomLog /usr/local/apache/domlogs/mysite.org-bytes_log "%{%s}t %I .\n%{%s}t %O ."
## User myuser # Needed for CPanel::ApacheConf
UserDir disabled
UserDir enabled myuser
<IfModule mod_suphp.c>
suPHP_UserGroup myuser myuser
</IfModule>
<IfModule !mod_disable_suexec.c>
<IfModule !mod_ruid2.c>
SuexecUserGroup myuser myuser
</IfModule>
</IfModule>
<IfModule mod_ruid2.c>
RUidGid myuser myuser
</IfModule>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/mysite.org.crt
SSLCertificateKeyFile /etc/ssl/private/mysite.org.key
SSLCACertificateFile /etc/ssl/certs/mysite.org.cabundle
CustomLog /usr/local/apache/domlogs/mysite.org-ssl_log combined
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
<Directory "/home/myuser/public_html/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
Include "/usr/local/apache/conf/userdata/ssl/2/myuser/mysite.org/*.conf"
</VirtualHost>
这是我为子 uri 整理的包含文件的当前版本:
RewriteEngine On
RewriteOptions Inherit
RailsEnv production
<Directory /home/myuser/public_html>
Options Indexes FollowSymLinks -MultiViews
AllowOverride all
Order allow,deny
Allow from all
</Directory>
RackBaseURI /home/myrailsapp/current
<Directory /home/myuser/public_html/railsapp>
Options -MultiViews
</Directory>
/home/myuser/public_html/railsapp 是/home/myrailsapp/current/public 的符号链接(symbolic link)
这里是/home/myrailsapp/current/public/.htaccess
RackBaseURI /railsapp
SetEnv GEM_HOME /usr/local/lib/ruby/gems
PassengerEnabled On
PassengerAppRoot /home/myrailsapp/current/
/home/myrailsapp 和/home/mysite 中的所有文件均归 myuser 所有。 (我没有看到任何权限错误。)
在我的路线文件中:
resources :widgets
root :to => 'widgets#index'
当我导航到 https://mysite.org/railsapp 时它正确显示小部件索引,包括 Assets 。当我去 https://mysite.org/railsapp/widgets或https://mysite.org/railsapp/widgets/index ,我收到 Apache 404,并且 Rails 日志中没有任何条目。
我错过了什么?
最佳答案
事实证明/home/myuser/public_html 中的 .htaccess 正在重写所有内容。对/mysite/railsapp 的请求被豁免,因为它与目录名称匹配。我通过添加
解决了这个问题RewriteEngine off
到/home/myrailsapp/current/public/.htaccess。
关于ruby-on-rails - 使用 Apache 2、Rails 3.2 和 Phusion Passenger 配置子 uri 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871156/