如何使用rubygems正确打包应用程序?

时间:2012-02-27 22:48:52

标签: ruby rubygems dependencies gem distribution

我一直在研究一些我想分享的实用程序(而不是库)。使用rubygems打包它们的正确方法是什么?有没有最好的做法?

具体来说,我想知道如何处理用户具有多个版本的依赖项的可能性。 Bundler在开发环境中表现出色;最终用户应用程序是否有任何等价物?有没有办法使用gemspec自动要求所有指定宝石的正确版本?

我知道有几个 package-everything-as-executable 解决方案,但我想避免使用它们。我认为用户应该能够发布gem install my_utility并获得具有正确依赖关系的最新版本,并且仍然拥有一个理智的环境。

2 个答案:

答案 0 :(得分:2)

看起来你最大的问题是如何在使用gemspec文件时获得正确的gem依赖版本,我是对的吗?

嗯,这是典型的gemspec文件的一个例子:

Gem::Specification.new do |spec|
  spec.name         = "hello_world"
  spec.version      = "0.1.0"
  spec.author       = "Bilbo Baggins"
  # Here's a gem dependency
  spec.add_dependency "json", ">= 0.4.0"
end

如果您想使用 json版本1.5.4,请尝试以下方法:

Gem::Specification.new do |spec|
  # ...
  spec.add_dependency "json", "= 0.4.0"
end

这只会确保已经安装了指定的版本,但实际上确保在实用程序中加载,您可以这样做:

gem "json", "= 0.4.0"
require "json"

答案 1 :(得分:1)

您可以使用bundler来开发宝石。