RAILS_ROOT(Rails.root)来自哪里?

时间:2013-04-19 15:35:25

标签: ruby ruby-on-rails-3 apache passenger

我在位于/home/user/application的rails应用程序上有一个ruby。我有一个Apache Web服务器,其DocumentRoot是/var/www。我有一个符号链接/var/www/application -> /home/user/application

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

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

我修改了Passenger代码,所以在它产生的最开始它将打印(到文件)选项app_root。如果重要,我修改了方法phusion_passenger/spawn_manager.rb中的文件handle_spawn_application

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

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

1 个答案:

答案 0 :(得分: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 documentation. 您需要添加DocumentRoot并将/ public附加到您的Directory配置并撤消对spawn_manager.rb的更改。

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

你想要Rails的RackBaseURI而不是RailsBaseURI&gt; 3

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