我在位于/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
,一切正常。
答案 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应用程序。