22

我有一个我想重命名的宝石。它发布在 RubyGems 上。我最关心的是想要更新它的人。

我看到了两条路径,但真的很想听听那些重命名他们的 gem 的人,他们是如何做到的。

1.把旧的变成一个元包

  • 创建一个新的 gem(命名为smart-cropper
  • 添加smart-croppercroptoelie(旧宝石)的依赖项
  • 删除所有的库、箱和其他代码croptoelie

我看到的一个问题是它太透明了,人们可能没有意识到他们使用的 gem 不再被维护。

另一个问题是版本控制变得更加困难:每次我发布重命名 ( smart-cropper) gem 的新版本时,我都必须升级旧“元包”的版本,否则人们将永远无法获得新版本。

2.抛出弃用警告

我可以发送旧版 gem 的版本,它会简单地抛出弃用警告以及人们应该安装新版 gem 的消息。

我看到的问题是它可能非常具有侵入性,并且可能使人们[1] 完全远离宝石。

还有其他选择吗?“RubyGems”中是否内置了一些东西来适应名称的变化?

[1] 没有太多人在使用它;因为名字很难找到。:)

4

1 回答 1

29

您只需使用新名称推送新 gem 并告诉您的用户新名称。没有重命名宝石的机制。-- RubyGems 支持人员,2012 年 2 月 20 日

为此,以下是一些技巧(其中一些我看到你已经完成了)。

在旧宝石中,抛出弃用警告

例子:

warn "[DEPRECATION] This gem has been renamed to _____ and will no longer be supported. Please switch to _____ as soon as possible."

在旧宝石的.gemspec文件中

安装旧 gem 后使用post_install_message属性显示一条消息。以下示例基于Heroku gem

gem.post_install_message = <<-MESSAGE
!    The '_____' gem has been deprecated and has been replaced by '_____'.
!    See: https://rubygems.org/gems/_____
!    And: https://github.com/_____/_____
MESSAGE

在旧的 GitHub 存储库页面上

-1- 在页面顶部:向此存储库添加描述:(提供新名称)

Moved to ---> "_____".

-2- 在页面顶部:将网站添加到此存储库:(将此作为新存储库的 URL)

https://github.com/_____/_____

-3- 上传新的README.markdown

# OLD NAME

Moved to [new name](https://github.com/_____/_____).

-4- 考虑删除所有非必要文件。

在新 gem 的.gemspec文件中

summary在ordescription属性的末尾包含以下通知:

Formerly known as '_____'.

拉出旧宝石

在某个遥远的地方,您可能想要从 RubyGems 中删除旧的 gem。从 RubyGems1.3.6和 gemcutter 0.5.0(大约 2010 年 2 月)开始,您可以使用gem install 和其他 gem 命令gem yank来删除您的 gem。但是,gem 仍然可以下载,主要原因有两个:

  1. 可能已推送其他宝石,具体取决于您的宝石。
  2. 可以轻松防止大量删除基于社区的重要 gem。

转到此处以获取有关 yank 的更多信息。

于 2013-01-04T01:21:09.323 回答