Phusion Passenger Sub URI sym链接问题

时间:2011-04-18 21:09:05

标签: ruby-on-rails-3 passenger

我正在使用Apache和Phusion Passenger在Ubuntu上部署子URI rails应用程序

www.mydomain.com/suburi 

我遇到配置问题。现在我收到这个错误:

Passenger Error #2
An error occurred while trying to access '/srv/www/mydomain/public/suburi': Cannot resolve possible symlink '/srv/www/mydomain/public/suburi': No such file or directory (2)

mydomain.com的rails应用程序和mydomain.com/suburi的rails应用程序都位于/ srv / www /

我当前的虚拟主机如下所示:

<VirtualHost 173.230.137.212:80> 
  ServerName www.mydomain.com
  ServerAlias mydomain.com
  DocumentRoot /srv/www/mydomain/public
  ErrorLog /srv/www/error.log
  RewriteEngine On
  RewriteOptions Inherit
  RailsEnv production

<directory /srv/www/mydomain/public>
  Options Indexes FollowSymLinks -MultiViews
  AllowOverride all
  Order allow,deny 
  allow from all
</directory>

RailsBaseURI /suburi                   
<Directory /srv/www/suburi>
  Options -MultiViews               
</Directory>

我知道路径是正确的,但这是我所知道的唯一正确的路径。我的服务器管理技能并不令人惊讶。

我从mydomain.com的公共文件夹到子uri的公共文件夹创建了一个sym链接。不确定我是否做得对,我发现文档不是那么好。我有什么遗漏和/或做错了吗?我是否制作了错误的系统链接?

我真的很感激一些帮助。

或者就此而言,如果有人知道一个更好/更简单的方法来做一个子域,比如subdomain.mywebsite.com也可以。

谢谢

1 个答案:

答案 0 :(得分:2)

如果你使用suburi-s,那么

  1. <documentroot>/<suburi>旨在指向您的rails app的公共目录
  2. 你的rails app root目录是rails app public上面的一个目录
  3. 如果您为自己的域名获得了专门的公共docroot,那么两者都会得到解决,然后就可以了

    ln -sf /path/to/suburi-rails-app/public <documentroot>/<suburi>
    

    文档确实不是很好。所以你的解决方案是:

    ln -sf /srv/www/suburi/public srv/www/mydomain/public/suburi
    

    和vhost conf:

    <VirtualHost 173.230.137.212:80> 
    
      ServerName www.mydomain.com
      ServerAlias mydomain.com
      DocumentRoot /srv/www/mydomain/public
      ErrorLog /srv/www/error.log
      RewriteEngine On
      RewriteOptions Inherit
      RailsEnv production
    
      <Directory /srv/www/mydomain/public>
        Options FollowSymLinks -MultiViews
        AllowOverride all
        Order allow,deny 
        Allow from all
      </Directory>
    
      RailsBaseURI /suburi                   
      <Directory /srv/www/mydomain/public/suburi>
        Options -MultiViews               
      </Directory>
    
    </VirtualHost> 
    

    你这么说:mydomain.com的rails应用程序和mydomain.com/suburi的rails应用程序都位于/ srv / www /

    这让我感到困惑,我认为想要在域上运行应用程序而在子库中运行另一个应用程序并不是一个好主意,因为路由必然会混淆。 而是使用2个suburi-s,在这种情况下做

    ln -sf /srv/www/suburi2/public srv/www/mydomain/public/suburi2
    

    其中/ srv / www / suburi2是您的第二个应用程序根目录,并添加:

    RailsBaseURI /suburi2                   
    <Directory /srv/www/mydomain/public/suburi2>
      Options -MultiViews               
    </Directory>
    

    您可以在同一个虚拟主机中添加任意数量的子目录。

    希望这有帮助