【发布时间】:2013-10-11 23:44:35
【问题描述】:
我正在尝试设置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 的用户中安装一堆gem?
- 我是否需要授予 www-data(该乘客在 AFAIK 上运行)访问某个 gem 目录的权限?
- 我应该增加 GEM_HOME 吗?如果是,我应该指向哪个 gem 目录?
- 为什么在安装 nginx 乘客包时没有进行此设置?
我基本上在所有可以安装的地方都安装了 bundler,但肯定漏掉了一些重要的东西。
- RVM 如何使事情复杂化?
- 使用 RVM 时需要注意什么?
- 系统中的每个用户是否都获得了我在 RVM 中设置的 Ruby 版本?如果没有,我该怎么做?
我觉得我现在已经接近掌握全部内容了,但我自己还没有读懂解决方案。
如果您转到http://privateering.me:8000/,您可以看到错误转储的其余部分。
【问题讨论】:
-
据我所知,路径中使用了 1.9.1,即使您正在运行 1.9.3。这本身不是问题。不过,我想不出任何好的理由为什么有人认为在路径中有 1.9.1 是个好主意。另外,请阅读
rvm wrapper,它会为您生成具有正确 gemset 和 ruby 版本的二进制存根(例如乘客)。 -
我知道乘客被配置为使用包装器somewhere,因为我在配置文件中看到了它。问题似乎是 www-data 没有所需的 ruby 版本,也没有 gem。在这一点上,我觉得让乘客在 www-data 上运行会更好,或者将 GEM_PATH 更改为指向我用来安装所有内容的用户的 gem 目录
-
IIRC,早在几年前的黑暗时代,*nix 存储库的维护者之间有一个很大的恶臭,即 Ruby 开发进展过快并给他们造成了负担当他们试图跟上。结果,“他们”决定坚持使用 Ruby191 作为 Ruby 1.9+ 版本的名称。从源代码或映像安装的 RVM 不依赖 repos,因此它的版本号更加合理,因为它们来自 Ruby 开发人员自己,没有 repo 维护者。因此,我建议使用 RVM 或 rbenv。
标签: ruby-on-rails ruby ubuntu nginx ruby-on-rails-4