【问题标题】:Private gem in gemspecgemspec 中的私人宝石
【发布时间】:2013-10-28 04:41:46
【问题描述】:

我的 gem 中需要私有 gem,而 gemspec 依赖项不能包含 git 存储库。

所以我用 geminabox 盯着我的私人服务器,并将源代码添加到我的 gemfile。

当我捆绑安装或安装名为“core”的 gem 时,会从 ruby​​gems 安装 gem,而不是从我的存储库安装 gem。

如何在 gemspec 中指定我自己的 gem?

【问题讨论】:

  • 我认为answer 可能就是您要找的。​​span>

标签: ruby rubygems gem bundler gemspecs


【解决方案1】:

迟到了,但对于任何发现此问题的人来说,当前的答案是为您的环境添加一个私有 gem 源。

gem sources --add http://localhost:9292

更多信息可以在这里找到:https://guides.rubygems.org/run-your-own-gem-server/

【讨论】:

  • 5 年零 3 个月。我想编程问题永远不会过时:)
  • 有些问题永远不会消失 :)
【解决方案2】:

最后,如果他们发布了比你更高的版本并且你捆绑更新它,捆绑将获得他们的新版本,所以要非常小心。

更改 Gemfile 中源代码行的顺序,优先顺序相反:

source 'https://rubygems.org'
source 'http://yourgeminaboxhost/gems'

不过,请确保您使用可以解析为您发布的 gem 版本的版本规范:

gem 'core', '0.0.1'    # If both gems have that version, it will get the one
                       # in the last sourced gem server
gem 'core', '~> 0.0.1' # This will get the greatest version greater than 0.0.1 and 
                       # lower than 0.1.0 in any of the sources so be careful
                       # because the one in rubygems is 0.0.6 > 0.0.1

另一种选择是将您的版本号增加到大于他们的版本号并在您的 gemfile 中指定它,假设您将您的 gem 发布为 1.0.0:

gem 'core', '~> 1.0.0' # This will get your releases until they start to 
                          # release a version greater than 1.0.0

最后的手段是更改名称,可能会为其命名空间,因为如果有人发布了与您在 Gemfile 中的版本规范相匹配的更大版本,则总是存在从 ruby​​gems.org 获取版本的风险。

【讨论】:

  • 所以最好的方法是完全特定的 gem 版本,对吗?因为,当我没有准确指定它时,可能是从 ruby​​gems 安装的版本,什么时候有更大的版本。当我命名它时,有人可以发布具有相同名称的gem,并且情况会重复
  • 没错。我希望您可以指定每个 gem 的来源,或者类似:source 'myrepo' { gem 'core' }
  • @JuanCastañeda 您可能会为捆绑程序创建问题! ;D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2014-08-06
相关资源
最近更新 更多