2

我应该如何将代码的版本号存储在 ruby​​ gem 中?

我在野外看到了两种技术:

  1. <gem root>/VERSION仅包含您的semver
  2. <gem root>/lib/your_gem/version.rb其中包含以下代码:

 

module IfYourCodeIsInAModule
  class YourGem
    VERSION="0.0.1"
  end
end

我喜欢 1. 因为它真的很明显。我喜欢 2. 因为它是我的代码的一部分,我可以轻松地用我的版本号写入日志。

我不喜欢 1. 因为如果我想从我的代码中访问版本号,我必须读取文件(这不是最糟糕的事情),我不喜欢 2. 因为如果我的核心类从另一个扩展上课那么我也必须有那种礼貌version.rb(或者得到一个superclass mismatch) - 例如。

module IfYourCodeIsInAModule
  class YourGem < OtherWork
    VERSION = "0.0.1"
  end
end

当您从实际代码中需要此文件以进行运行时,一切都很好。当您将它包含在您的 gemspec 中时,您突然需要 require 'other_work'获取您的版本号!

我很高兴推出自己的解决方案,但这不可能是一个新问题,社区在做什么,对此有何普遍看法?

4

1 回答 1

1

我不是 gem VERSION 民族学方面的专家,但也许这种非专业知识使我更加平均,更适合回答有关“普遍智慧”的问题。

所以,一般的智慧是,使用 Bundler。一旦您通过 . 创建 gem bundle gem my_gem_name,您将看到捆绑程序自动创建lib/my_gem_name/version.rb文件并从lib/my_gem_name.rb. 所以我建议如果你决定不使用 bundler 并自己滚动你自己的 gem,你仍然应该保留一个单独的version.rb文件,只包含

module MyGemName
  VERSION = "0.0.1"
end

也就是说,直接在主模块下方。然后加载version.rbfrom lib/my_gem_name.rb。当然,如果你的代码以更陌生的方式组织,那么你需要更多的即兴发挥。

于 2013-02-11T12:19:39.040 回答