ruby-on-rails - 使用 Apache 2、Rails 3.2 和 Phusion Passenger 配置子 uri 时遇到问题

标签 ruby-on-rails apache cpanel passenger

我需要一些帮助,让 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/widgetshttps://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/

相关文章:

ruby-on-rails - Rails Assets 管道 : how to create custom manifest file

ruby-on-rails - Rails - 有两个 parent 的嵌套资源

ruby-on-rails - Rails 一对一关系

apache - XP 上的 IE 不支持 SNI 允许单个服务器使用多个证书

java - 使用 intellij-idea 在 Windows 上的 tomcat 启动问题

mysql - 如何限制用户只能使用存储过程?

php - 将使用 tempnam() 创建的文件的权限从 600 更改为 644

ruby-on-rails - ActiveRecord::DangerousAttributeError - 属性?由 ActiveRecord 定义

apache - 需要在.htaccess中为Magento网站创建RewriteRule

php - 如何为 Centos 安装 php-mysqli 包