如何向Rubygems.org推送gem?遇版本号冲突问题求解
解决Rubygems推送时"Canonical number has already been taken"报错的问题
问题原因
Rubygems对版本号做规范化处理,比如1.0.0和1.0会被识别为同一个"规范版本"。你搜不到webri gem,大概率是这个gem曾经存在过(比如作者删除了gem包,但版本记录仍在Rubygems的数据库里),导致1.0这个规范版本被占用,你的1.0.0自然无法推送。
解决步骤
升级到全新版本号
直接把版本号改成未被占用的规范版本,比如1.0.1或者2.0.0:- 修改你的gemspec文件,把
spec.version改成新的版本号,比如spec.version = "1.0.1" - 删除本地和远程的旧标签(如果已经打了v1.0.0标签):
git tag -d v1.0.0 git push origin :v1.0.0 - 打新标签并推送:
git tag v1.0.1 git push origin v1.0.1 - 重新执行
rake release
- 修改你的gemspec文件,把
确认gem名称状态(可选)
可以用命令行查询gem的官方状态,避免搜索延迟的问题:curl https://rubygems.org/api/v1/gems/webri.json如果返回404,说明gem确实不存在,但版本冲突还是因为历史遗留记录,按上面的版本升级方案处理即可。
更换gem名称(终极方案)
如果升级版本还是不行,考虑给gem换个独特的名称,比如webri-core、webri-ruby,彻底避开历史版本的冲突。
内容的提问来源于stack exchange,提问作者Burdette Lamar
相关产品推荐
相关产品推荐

