【问题标题】:Where does RAILS_ROOT (Rails.root) come from?RAILS_ROOT (Rails.root) 来自哪里?
【发布时间】:2013-04-19 15:35:25
【问题描述】:

我有一个位于 /home/user/application 的 ruby​​ on rails 应用程序。我有一个 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>

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

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

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

【问题讨论】:

  • 我对 Ruby 和 Ruby on Rails 都不熟悉。如果缺少任何有用的信息,请告诉我。

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


【解决方案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 添加到您的目录配置并撤消对 spawn_manager.rb 的更改。

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

你想要 RackBaseURI 而不是 RailsBaseURI 用于 Rails > 3

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

【讨论】:

  • 我无法将 DocumentRoot 设置为 /var/www/application/public。我的其他网站呢?
  • 您没有提到其他网站,请阅读文档的下一部分。我会更新答案。
  • 别担心。你的回答足以让我想办法解决。
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 2010-09-21
  • 2014-04-24
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多