1

我需要将我的 Rails 应用程序部署到已经在其根目录服务 PHP 站点的服务器。我无法触及现有网站,我必须将我的应用程序部署在子 url 或子域,即xx.xx.xx.xx/railsrails.xx.xx.xx.xx.

我通常用来部署我的应用程序的 Apache 配置:

    <VirtualHost *:80>

      ServerName localhost

      DocumentRoot "C:/RubyStack-3.2.5-0/projects/app_name/public"
      <Directory "C:/RubyStack-3.2.5-0/projects/app_name/public">
        Allow from all
        Options -MultiViews
      </Directory>

      RewriteEngine On

      RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
      RewriteRule ^/(.*)$ balancer://app_balancers%{REQUEST_URI} [P,QSA,L]

      <Proxy balancer://app_balancers>
        BalancerMember http://localhost:3001/
        BalancerMember http://localhost:3002/
      </Proxy>

      # Support for far-futures expires header
      <LocationMatch "^/assets/.*$">
        Header unset ETag
        FileETag None
        # RFC says only cache for 1 year
        ExpiresActive On
        ExpiresDefault "access plus 1 year"
      </LocationMatch>
    </VirtualHost>

如何更改此配置以从子 URL 或子域提供该文件夹?ARedirectMatch行不通,因为它还会将人们从现有的 PHP 站点中引导出来,对吗?

4

1 回答 1

1

最简单的方法是使用您建议的子域进行基于名称的虚拟主机。所以你写的地方:

<VirtualHost *:80>
  ServerName localhost
</VirtualHost>

只需输入您的子域:

<VirtualHost *:80>
  ServerName mysubdomain.mycompany.com
</VirtualHost>

然后,Apache 应该自动将对该子域的任何请求与“主”虚拟主机分开。

编辑:

或者,也可以将您的 rails 应用程序安装到子目录(假设您使用的是 Passenger。)这是一个基于我自己的本地暂存环境的示例。我按照Phusion 网站上的说明完成了这项工作

<VirtualHost *:80>
  ServerName localhost

  # We will mount our application under http://localhost/myapp
  RailsBaseURI /myapp

  # This can be anywhere on the system, I just happened to use /home/www
  <Directory /home/www/myapp>
    # Here you can add any directives necessary for your app, like for example..
    SetEnv GEM_HOME /home/user/.rvm/gems/ree-1.8.7-2012.02
  </Directory>
</VirtualHost>

现在您必须再做一件事,那就是使 /home/www/myapp 成为指向实际应用程序的公共目录的链接。因此,假设您在自己的 homedir 中有应用程序,您必须输入以下内容:

cd /home/www
ln -s /home/myuser/myapp/public myapp

如果您然后键入 ls -l 它应该显示:

lrwxrwxrwx 1 myuser myuser 18 Jun 10 16:41 devb -> /home/myuser/myapp/public

我认为应该是这样。

于 2012-08-24T15:21:51.940 回答