Ruby Gem在本地gem和系统安装的gem

时间:2017-04-11 23:48:50

标签: ruby linux ubuntu rubygems

我有一个看起来像这样的Gemfile:

来源' http://rubygems.org'

gemspec
gem "parent_gem", "0.1.3", :path => "#{File.expand_path(__FILE__)}/../vendor/gems/parent_gem-0.1.3"

parent_gem取决于child_gem-1.4.1,我们已将其打包在包中的/vender/gems文件夹中。如果用户在Ubuntu上的主机上安装child_gem-1.6.0,他们将获得Gem::ConflictError,因为它会尝试使用1.6并记录child_gem-1.6.0 conflicts with child_gem (~> 1.4.1).但是,如果用户在Amazon Linux上运行它,那么工作正常并使用打包的子gem。

如果我运行gem list child_gem,我会在两个系统上获得以下输出:

*** LOCAL GEMS ***

child_gem (1.6.1)

gem list parent_gem不返回任何内容,因为它没有分开安装,只存在于程序包的vendor目录中。

在启动脚本的文件中,有以下行:

Gem.use_paths(nil, Gem.path << "/opt/my-app/vendor")

/opt/my-app/vendor目录包含child_gem-1.4.1

最终,我知道使用Bundler正确设置软件包可以解决问题,但我试图理解为什么这是一个问题。

Ruby如何决定在系统中寻找宝石的位置?我在哪里可以理解为什么它适用于亚马逊Linux但不适用于Ubuntu?

0 个答案:

没有答案