2012-06-07 16 views
1

我最近開始創建一個私有gem(我可以保證沒有人使用它)來封裝利基數據庫的JDBC驅動程序。我最終只是發佈了一個我想要做一個解決方案的gem版本。通過替換整個gem重新發布RubyGems上的gem?

我明白如何yank一個寶石版本,以及碰撞版本號和發佈的常見解決方案,這在大多數情況下是有意義的。然而,對我而言,這並不是那麼簡單,因爲我希望使用與捆綁的數據庫驅動程序相同的gem版本(這似乎是一種常見做法),所以顛覆​​版本號不是一種選擇。由於數據庫版本中有字母字符,導致~>操作符不可用(所有版本都被視爲預發行版),所以我也無法做一些巧妙的事情,比如向數據庫版本號添加.1後綴。總之,我需要那個確切的版本號。

我的問題是,如果我在RubyGems的名字池抽出所有寶石的版本使寶石的名字再次可用,我可以重新聲明寶石名稱,並用同樣的寶石版本推不同的代碼我以前使用?

+0

我不擔心將驅動程序版本匹配到您的寶石版本。也許主要版本可以匹配,但通常這隻會導致你的問題。如果您想在發佈時間表之外發布,該怎麼辦?你如何告訴用戶關於重大變更(通常是主要版本增量)?這總是取決於你,但我會避免它。 – Travis

+0

是的,這絕對是一個棘手的問題。這個包裝器非常簡單(它實際上只是'需要'來加載.jar文件,因爲驅動程序是專有的),所以一旦我準備向公衆發佈,它不應該因爲緊急情況而需要改變或類似的東西。下次我將在發佈到RubyGems之前測試更多。 –

回答

1

你不能取代寶石,對不起。您必須提交新版本。

+0

我的實驗似乎證實了這一點。 –

3

防止Gem修改是RubyGems.org設計的一部分。用戶計算機上的RubyGems將緩存原始gem文件,因此如果運行gem install兩次 - 如果在RubyGems.org上修改了原始gem,但舊版本保存在緩存中,則行爲可能不一致。因此,您唯一能做的事情就是yank或聯繫RubyGems.org團隊爲您制定一個例外。

當我們完成了包裝,就像您建議的那樣,我們添加了另一個.1後綴來區分包裝特定版本庫的不同版本。