设置Passenger和Rails时的知识差距

时间:2013-10-11 13:47:37

标签: ruby-on-rails ruby ubuntu nginx ruby-on-rails-4

我正在尝试设置Passenger,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运行的用户?
  • 我是否应该在Passenger的用户中安装一堆宝石?
  • 我是否需要授予www-data(乘客在AFAIK上运行)访问某些gem目录?
  • 我应该扩充GEM_HOME,如果是,我指向哪个gem目录?
  • 为什么在安装nginx乘客套件时没有这个设置?

我已经在任何地方安装了捆绑器,但一定是错过了重要的东西。

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

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

如果你转到http://privateering.me:8000/,你可以看到错误转储的其余部分。

1 个答案:

答案 0 :(得分:3)

今天早上好!我喝咖啡了!我们走了!

  

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

正如tessi所提到的,对于Ruby 1.9.3的某些版本,路径中的1.9.1是正常的。这很奇怪而且令人困惑,但事实就是如此。这本身并不是立即引起的。

  

此外,如何更改运行哪位用户?

Phusion有一些非常好的documentation for Phusion/Nginx,其中包含所有配置参数。但它可能没有必要,因为正如user-related docs告诉你的那样,Passenger默认会尝试以拥有它的用户身份运行每个应用程序。

  

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

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

  

为什么在安装nginx乘客套件时没有这个设置?

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

  

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

RVM使事情充分复杂化。默认情况下,它是以单用户身份安装的,仅影响单个用户。这是它的确切用例:当我登录时,想要一个不同的Ruby并且不想污染系统。由于RVM工作的特殊方式,还有其他复杂情况。

但是,Phusion意识到有些人会出于某种原因在生产中使用RVM and covers that situation in the installation documentation

通过将RVM从图片中删除,可以轻松避免涉及RVM和Passenger的大多数痛苦。除非你是一个极具异国情调的平台,否则建立一个现代的Ruby就是./configure && make && make install的问题。一行,您在/usr/local中拥有一个稳定的,系统范围的Ruby,您可以轻松访问,乘客和其他所有内容。