1

我有一个 ruby​​ on rails 应用程序,位于/home/user/application. 我有一个 Apache 网络服务器,其 DocumentRoot 为/var/www. 我有一个符号链接/var/www/application -> /home/user/application

我关于 ruby​​ on rails 的 apache 配置部分如下:

    RailsBaseURI /application
    <Directory /home/user/application>
            Order Allow,Deny
            Allow from all
            Options -MultiViews
    </Directory>

我修改了乘客代码,因此在它生成的一开始它会打印(到文件) option app_root。如果重要,我修改了phusion_passenger/spawn_manager.rb方法中的文件handle_spawn_application

我得到的价值是/home/user,这是错误的,我需要/home/user/application. 所以我的问题是,Passenger 如何计算出option['app_root'](变成RAILS_ROOT| Rails.Root)?

观察:我将乘客代码修改为硬编码app_root/home/user/application一切正常。

4

1 回答 1

1

更改符号链接,使 /var/www/application 指向 /home/user/application/public

然后只需将 RailsBaseURI 更改为 RackBaseURI 并撤消对 spawn_manager.rb 的更改


先前的讨论假设单一应用。

    <Directory /var/www/application/public>
            Order Allow,Deny
            Allow from all
            Options -MultiViews
    </Directory>

请参阅Apache Phusion 文档。 您需要添加 DocumentRoot 并将 /public 附加到您的目录配置并撤消对 spawn_manager.rb 的更改。

正如您所注意到的,app_root 是指定目录的上一级目录。/home/user/application/public 的父目录是 /home/user/application,它是 Rails 根目录。

对于 Rails > 3,您需要 RackBaseURI 而不是 RailsBaseURI

这背后的原因是 Apache 提供静态资产(位于公共目录中),然后如果不存在,Passenger 将请求路由到 Rails 应用程序。

于 2013-04-19T18:56:09.107 回答