0

我有一个 gem,它依赖于 Bundler 的 Gemfile 来查找它的依赖项(它们托管在 github:enterprise 上)。我希望它可用作库并提供二进制文件。

目前,如果我从自己的目录运行它,它可以作为二进制文件正常工作,二进制文件可以在其中加载捆绑的 gem。但是,如果我从不同的目录运行它,它将找不到依赖项(它们在自己的 rvm gemset 中)。我无法将它作为 gem 安装,因为 Rubygems 找不到依赖项(目前它们列在 .gemspec 中,然后告诉在 Gemfile 中的位置)。

我目前正在尝试bundle package,它将所有 gem 放在 vendor/cache 目录中。据我所知,这意味着我需要从 .gemspec 中删除依赖项,而是将依赖项删除到 Gemfile 中(因为 Rubygems 不应该安装它们,因为它们是供应商的)。这意味着使用此 gem 的任何代码都需要了解这些依赖项,并将它们添加到它们的 Gemspecs 中,但我同意。我认为如果我在构建时修改 .gemspec 以包含供应商的 gem,并且如果我可以管理加载路径以便二进制文件将供应商的 gem 设置在加载路径的前面,那么这可能会起作用,但是任何使用它的代码库不会将这些添加到加载路径中,因此它们将获得已安装的任何版本。

不幸的是,我不知道该怎么做(没有阅读所有的 gemspecs,反思他们require_paths将它们添加到 中$LOAD_PATH),我不确定这是处理这种情况的正确方法。

那么,当它需要 Bundler 来查找它的 gem 时,我如何制作一个可以用作 lib 或仅用于其二进制文件的 gem?

4

1 回答 1

0

如果您在自己的 github 企业实例中托管代码,那么拥有一个自定义 ruby​​gems 服务器可能是个好主意。然后,您可以将内部 gem 发布到该服务器,并让 bundler 从那里检索它们。

这应该是一个透明的工作流程,就像您在现实世界中运行您的二进制文件一样!

于 2012-10-13T14:45:48.120 回答