【发布时间】:2016-01-29 00:23:52
【问题描述】:
我有一个脚本,它需要一个 gem,我是从一个具有特定分支的私有 github 存储库中获取的(我们只需调用这个 gem foobar)。
我正在使用 rvm、rails 版本 2.3.0 和 gemset(我们称之为 testset)。 我正在使用 bundler 来安装我的 gems。
当我使用bundler exec ruby script.rb 执行我的脚本时,它运行良好。但是,当我尝试使用 ruby script.rb 运行它时,出现以下错误:
require': cannot load such file -- foobar (LoadError)
还值得注意的是,如果我使用 gem 的路径如下,则仅使用 ruby 有效:
require '~/.rvm/gems/ruby-2.3.0@testset/bundler/gems/foobar-a41fed1fcab7/lib/foobar.rb'
有没有我可以在只使用require 'foobar的同时使用ruby script.rb?
【问题讨论】:
-
使用 bundle exec 运行脚本是最佳实践。否则,您将走上一条黑暗的道路,以确保 x 数量的宝石在全球范围内可用。如果您尝试包含本地文件或 gem,那么您必须
require 'path/to/gem' -
不会 rvm 解决这个问题吗?因为我只在特定的 gemsets 中提供我的包?
-
对我来说,这听起来像是您正在尝试使用 gemsets 完成同样的事情,这在历史上很容易出现问题,您可以使用 bundler 完成,为您开箱即用。我不完全确定您的 RVM 设置是什么样的,但有很多陷阱。
bundler exec是最佳实践,因为它简单、可靠并且每个人都喜欢它。在它的核心,它是一个比 RVM gemsets 更复杂但更优雅的系统。如果我是你,我会将 RVM 的使用限制为仅控制 Ruby 版本和所需的全局 gem。你听说过 RBenv 吗? -
@Iwnnay 没有。总的来说,我实际上对 ruby 很陌生(因此提出了 nooby 问题)