2

我正在尝试部署一个用 Ruby 编写的小型命令行应用程序。应用程序所依赖的许多 gem 都托管在我的 github 帐户上。我已经在Gemfile适当的地方指定了它们的位置。当我在部署机器上克隆存储库并bundle install从根目录运行时,一切顺利。然后我可以使用bin/hippo. 我想将应用程序安装到系统中,这样我就不需要修补$PATH或指定可执行文件的路径来使用它。

当我运行时gem install /path/to/my/.gem/file,安装失败并说它无法解析对托管在我的 Github 帐户上的个人 gem 的依赖关系。我认为这是因为该gem install命令没有读取Gemfile,只有gemspec(为什么捆绑器的人将他们的文件命名Gemfile而不是BundleFile什么?),并且 gem 的位置在中指定Gemfile(没有办法指向gemspec 中的 github gem,对吗?)。当我使用rake install捆绑脚手架 gem 附带的任务时,我遇到了同样的问题。但是,当我跑步时bundle exec gem install /path/to/my/gemfile然后它安装好了,我猜是因为它在捆绑器更改的加载路径上看到了我的 gem,并确定它们已经安装。但是,当我尝试运行可执行文件时,它失败了,因为它在需要时找不到依赖项。(请注意,可执行文件require bundler/setup在 shebang 之后的第一行)。

所以我问:使用 bundler 部署依赖于非 ruby​​gems 托管 gem 的命令行应用程序的好方法是什么?

4

1 回答 1

1

bundle exec正确设置加载路径,以便在require bundler/setup. 一种选择是始终使用bundle exec bin/hippo.

更适合您的目的可能是 run bundle install --standalone,它会在您的项目目录中生成一个bundle/bundler/setup.rb文件。该文件为您正确设置了加载路径,因此您只需require_relative '../bundle/bundler/setup'要从二进制文件而不是require 'bundler/setup'.

于 2013-06-21T02:47:31.933 回答