0

我正在尝试设置乘客、Rails 和 Nginx。Nginx 正确路由到Passenger,但是当我加载页面时出现以下错误:

cannot load such file -- bundler/setup (LoadError)
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:219:in `block in run_load_path_setup_code'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:333:in `running_bundler'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:217:in `run_load_path_setup_code'
/usr/share/passenger/helper-scripts/rack-preloader.rb:96:in `preload_app'
/usr/share/passenger/helper-scripts/rack-preloader.rb:150:in `<module:App>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
/usr/share/passenger/helper-scripts/rack-preloader.rb:28:in `<main>'

我不明白的是:

  • 为什么有一堆对 Ruby 1.9.1 的引用?我默认使用 1.9.3,并且在全局 1.9.3 和用户特定的 1.9.3 上都安装了 Bundler。
  • 如何更改乘客运行的用户?
  • 我是否也应该在Passenger的用户中安装一堆宝石?
  • 我是否需要授予 www-data(该乘客在 AFAIK 上运行)访问某个 gem 目录的权限?
  • 我应该增加 GEM_HOME 吗?如果是,我应该指向哪个 gem 目录?
  • 为什么在安装 nginx 乘客包期间没有进行此设置?

我基本上到处都安装了 bundler,但肯定错过了一些重要的东西。

  • RVM 如何使事情复杂化?
  • 使用 RVM 时需要注意什么?
  • 系统中的每个用户是否都获得了我在 RVM 中设置的 Ruby 版本?如果没有,我怎么能做到这一点?

我觉得我现在已经接近掌握整个事情了,但我自己却无法阅读解决方案。

如果您访问http://privateeering.me:8000/,您可以看到错误转储的其余部分。

4

1 回答 1

3

现在是早上!我喝过咖啡!我们走吧!

我不明白为什么有一堆对 ruby​​ 1.9.1 的引用?

正如 tessi 所提到的,对于 Ruby 1.9.3 的某些构建,路径中的 1.9.1 是正常的。这很奇怪和令人困惑,但它就是这样。这本身并不立即引起关注。

此外,如何更改运行的用户乘客?

Phusion 有一些非常好的Phusion/Nginx 文档,其中包括所有配置参数。但这可能不是必需的,因为正如用户相关文档会告诉您的那样,Passenger 默认情况下会尝试以拥有它的用户身份运行每个应用程序。

我是否也应该在乘客的用户上安装一堆宝石?

也许。可能不是。看上面。只要有可能,就没有一个“乘客用户”。只有当用户切换不可用时,Passenger 才会回退到以单个用户身份运行(无论 nginx 配置什么)。

为什么在安装 nginx 乘客包期间没有进行此设置?

因为Passenger 只是一个多租户、多语言的应用程序服务器。它不知道您是在运行一个应用程序还是一百个应用程序,Ruby 或 Python,Rails 或 Sinatra 或 Merb 或自制的东西。乘客的工作是在你告诉它是什么后运行应用程序;你的工作是让每个应用程序进入可运行状态。

RVM 如何使事情复杂化?使用 RVM 时需要注意什么?系统中的每个用户是否都获得了我在 RVM 中设置的 ruby​​ 版本?如果没有,我怎么能做到这一点?

RVM 使事情变得足够复杂。默认情况下,它以单用户为基础安装,并且仅影响单个用户。这正是它的预期用例:当我登录时,想要一个不同的 Ruby 并且不想污染系统。由于 RVM 工作的特殊方式,还有其他复杂性。

但是 Phusion 意识到有些人会出于某种原因在生产中使用 RVM,并在安装文档中介绍了这种情况

通过将 RVM 排除在图片之外,可以轻松避免大多数涉及 RVM 和乘客的痛苦。除非您在一个非常奇特的平台上,否则构建现代 Ruby 只是./configure && make && make install. 一行代码,您就拥有了一个稳定的、系统范围的 Ruby /usr/local,您、Passenger 和其他所有人都可以轻松访问。

于 2013-10-11T15:42:57.803 回答