国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何優雅的升級Ruby項目

Freeman / 1976人閱讀

摘要:選擇第三種方案的觀點通常是鎖定版本號穩定,升級會帶來麻煩,以前升級出現過問題,求穩等各種原因。問如果升級版本號真的出現問題了怎么辦答哪個出問題了找到問題的原因解決問題,如果解決不了可以不升級那個

一個長期維護的項目不斷輕松穩定的升級也是一件很有挑戰的事。很多項目因為沒有及時升級導致升級越來越困難,維護成本越來越高。自從Bundler的出現,Ruby項目的依賴管理變得方便和穩定。

但是從最近的一個帖子(http://ruby-china.org/topics/172)發現,在處理gem升級的問題上還存在一些分歧,升級方式主要有三種:

  1. optimistic[樂觀]
  2. pessimistic[悲觀]
  3. super pessimistic[超級悲觀]

以nokogiri這個gem為例:

gem ‘nokogiri’ #optimistic
gem ‘nokogiri’, ‘>=1.4.2’ #optimistic
gem ‘nokogiri’, ‘~>1.4.2’ #pessimistic
gem ‘nokogiri’, ‘~>1.4’ #pessimistic
gem ‘nokogiri’, ‘1.4.2’ # super pessimistic

第一種方式很少人采用,因為一旦升級很容易因為API不兼容導致你的項目爆掉。

主要分歧在第二種和第三種。選擇第三種方案(super pessimistic)的觀點通常是鎖定版本號穩定,升級會帶來麻煩,以前升級出現過問題,求穩等各種原因。

我比較推薦第二種(pessimistic)升級方式。

先解釋下>=1.4.2、~>1.4.2、1.4.2之間的區別:

gem ‘nokogiri’ #任何版本
gem ‘nokogiri’, ‘>=1.4.2’ #任何大于等于1.4.2的版本
gem ‘nokogiri’, ‘~>1.4.2’ #大于等于1.4.2并且小于1.5.0版本
gem ‘nokogiri’, ‘~>1.4’ #大于等于1.4.0并且小于2.0.0版本
gem ‘nokogiri’, ‘1.4.2’ # 只能等于1.4.2

還要說明一下Ruby gem采用的?Semantic Versioning

還拿nokogiri 1.4.2為例:

  • 1 → Major版本,在接口重構情況下Major Version會增加,API不一定向后兼容
  • 4 → Minor版本,在增加新特性情況下Minor Version會增加,并且 API保持向后兼容
  • 2 → Patch版本,在bug fix的情況下Patch Version會增加,并且API保持向后兼容

可見,使用第二種方式既不會出現API不兼容問題,又會及時升級到沒有bug的版本。與第三種比較,優點是: 升級方便,不需要修改Gemfile,直接運行bundle update,所有的gem升級到最新,如果需要升級gem的主版本號才需要更改Gemfile.

而指定版本號的方式需要知道最新版本是多少,并且一個一個的改版本號。增加了升級的復雜度。而實際上鎖定版本號的項目幾乎沒人去升級…

Bundler的FAQ也提到鎖定版本號的缺點:

FAQ:

問:gem作者不遵守semver規則怎么辦?

答:放棄使用他的gem!這也應該成為選擇gem的衡量標準之一。曾經rubygems自己沒有遵守這個規則,1.8.x系列修改了Public API導致大量gem安裝出現問題。 Loren Segal 從rubygems fork出了SlimGems,并且承諾長期維護和1.3.7兼容的API。

問:如果升級Patch版本號真的出現問題了怎么辦?

答:哪個gem出問題了找到問題的原因解決問題,如果解決不了可以不升級那個gem

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/562.html

相關文章

  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    caspar 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    nihao 評論0 收藏0
  • SegmentFault 技術周刊 Vol.40 - 2018,來學習一門新編程語言吧!

    摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...

    Drummor 評論0 收藏0
  • Cucumber —— 優雅、跨語言 BDD 框架

    摘要:是一個優雅的行為驅動開發方案。使用編寫,但是它不僅適用于,還適用于其他語言使用進行瀏覽器測試。此外,還支持大量的測試工具和網站框架,詳情見此。學習資源官方培訓項目主頁編撰 cucumber 是 一個優雅的BDD(行為驅動開發)方案。 showImg(http://segmentfault.com/img/bVcdje); 示例 Feature: Search courses ...

    MkkHou 評論0 收藏0
  • 2019 為什么我們還會繼續使用 PHP ?

    摘要:但我還是使用它開發了很多軟件。那么問題就很明顯了為什么今天還在使用除了個人理想主義的偏好以外,還有很多理由。為什么使用而不是也許和比較的最重要的語言是。為什么選擇而不是你已有專業知識或者在使用庫。 showImg(https://segmentfault.com/img/remote/1460000018390090?w=790&h=466); 我們來開門見山地說。? PHP 是一門奇...

    guyan0319 評論0 收藏0

發表評論

0條評論

Freeman

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<