【问题标题】:Passenger problem: "no such file to load" -- /config/environment乘客问题:“没有要加载的文件” -- /config/environment
【发布时间】:2011-02-13 13:08:39
【问题描述】:

我一直在研究这个问题,并在这里和那里发现了对类似问题的引用,但没有一个找到解决方案。我已经安装了乘客 (2.2.11) 和 nginx (0.7.64),当我启动并点击 Rails URL 时,我收到一个错误页面,通知我加载错误:

没有要加载的文件 -- /path/to/app/config/environment

从我在网上找到的内容来看,这似乎是某种用户/权限错误,但我已经尝试了所有逻辑修复:我已确保 /config/environment.rb 不属于 root ,但由 webapp 用户。我试过设置passenger_default_user,我试过设置passenger_user_switching。我什至尝试过设置 nginx 用户,但这并不重要。我得到了一些不同的结果,但实际上没有任何效果。我希望有人可能拥有此设置和权限的神奇组合。我可能会尝试退回到早期版本的Passenger,因为我以前从未遇到过这个问题;不过,我设置Passenger 已经有一段时间了。

感谢您的任何建议。

已编辑:关于我偶然发现的答案,请参见下文。

【问题讨论】:

  • 您应该将问题的解决方案移至其自己的答案,然后将答案标记为已接受。

标签: ruby-on-rails nginx passenger


【解决方案1】:

当然,我只是在发布问题后偶然发现了答案。为了向其他搜索此问题的人提供信息,我将在此处发布一些详细信息。

来自nginx.conf的相关行:

user www-data; # in order to have nginx not run as root

passenger_default_user www-data; # likewise for passenger

root /opt/foo/app/current/public;

此时的关键是确保应用程序文件归 www-data 所有,尤其是 config/environment.rb,因为显然,Passenger 会查看其所有者以确定以谁身份运行。这可能意味着passenger_default_user 条目无关紧要?但无论如何,将它作为意图文档放在那里是件好事。

最后,确保您的应用程序的父目录都可以通过www-data 访问——在我的情况下,系统默认设置留下了一个目录0700,我错过了。

【讨论】:

  • documentation 中所说的那样设置 PassengerUser 怎么样?
【解决方案2】:

Modern Passenger 更喜欢 Rack 而不是 Rails。如果您的 Rails 应用程序中有 config.ru,Passenger 将尝试将其加载为 Rack 应用程序。这可能会导致问题。特别是,您的错误消息指的是config/environment——请注意Rails 应用程序中缺少.rb 扩展。

如果存在config.ru,请尝试将其移开。

【讨论】:

  • 感谢您的想法——我在其他地方也看到过关于 Rack 偏好的说明,但这是一个普通的旧 Rails 应用程序。缺少 .rb 扩展名对我来说也很奇怪,而且我还没有找到任何解释......
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2013-02-20
  • 2011-04-30
相关资源
最近更新 更多