我应该如何将我的代码的版本号存储在ruby gem中?
我在野外看过两种技巧:
<gem root>/VERSION
仅包含您的semver。<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'
来获取版本号!
我很高兴能够推出自己的解决方案,但这不是一个新问题,社区在做什么,以及这方面的一般智慧是什么?
答案 0 :(得分:1)
我不是宝石版VERSION民族学的专家,但也许这种非专业知识使我更平均,更适合回答“一般智慧”的问题。
所以,一般的智慧是use Bundler。一旦您通过bundle gem my_gem_name
创建了gem,您就会看到捆绑包会自动创建lib/my_gem_name/version.rb
文件并从lib/my_gem_name.rb
开始需要它。所以我建议如果你决定不使用bundler并自己推出自己的gem,你仍然应该保留一个单独的version.rb
文件,只包含
module MyGemName
VERSION = "0.0.1"
end
也就是说,直接在主模块下面。然后,您从version.rb
加载lib/my_gem_name.rb
。当然,如果您的代码以更外来的方式组织,那么您需要进一步改进。