摘要:選擇第三種方案的觀點(diǎn)通常是鎖定版本號(hào)穩(wěn)定,升級(jí)會(huì)帶來(lái)麻煩,以前升級(jí)出現(xiàn)過(guò)問(wèn)題,求穩(wěn)等各種原因。問(wèn)如果升級(jí)版本號(hào)真的出現(xiàn)問(wèn)題了怎么辦答哪個(gè)出問(wèn)題了找到問(wèn)題的原因解決問(wèn)題,如果解決不了可以不升級(jí)那個(gè)
一個(gè)長(zhǎng)期維護(hù)的項(xiàng)目不斷輕松穩(wěn)定的升級(jí)也是一件很有挑戰(zhàn)的事。很多項(xiàng)目因?yàn)闆]有及時(shí)升級(jí)導(dǎo)致升級(jí)越來(lái)越困難,維護(hù)成本越來(lái)越高。自從Bundler的出現(xiàn),Ruby項(xiàng)目的依賴管理變得方便和穩(wěn)定。
但是從最近的一個(gè)帖子(http://ruby-china.org/topics/172)發(fā)現(xiàn),在處理gem升級(jí)的問(wèn)題上還存在一些分歧,升級(jí)方式主要有三種:
以nokogiri這個(gè)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
第一種方式很少人采用,因?yàn)橐坏┥?jí)很容易因?yàn)锳PI不兼容導(dǎo)致你的項(xiàng)目爆掉。
主要分歧在第二種和第三種。選擇第三種方案(super pessimistic)的觀點(diǎn)通常是鎖定版本號(hào)穩(wěn)定,升級(jí)會(huì)帶來(lái)麻煩,以前升級(jí)出現(xiàn)過(guò)問(wèn)題,求穩(wěn)等各種原因。
我比較推薦第二種(pessimistic)升級(jí)方式。
先解釋下>=1.4.2、~>1.4.2、1.4.2之間的區(qū)別:
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
還要說(shuō)明一下Ruby gem采用的?Semantic Versioning
還拿nokogiri 1.4.2為例:
可見,使用第二種方式既不會(huì)出現(xiàn)API不兼容問(wèn)題,又會(huì)及時(shí)升級(jí)到?jīng)]有bug的版本。與第三種比較,優(yōu)點(diǎn)是: 升級(jí)方便,不需要修改Gemfile,直接運(yùn)行bundle update,所有的gem升級(jí)到最新,如果需要升級(jí)gem的主版本號(hào)才需要更改Gemfile.
而指定版本號(hào)的方式需要知道最新版本是多少,并且一個(gè)一個(gè)的改版本號(hào)。增加了升級(jí)的復(fù)雜度。而實(shí)際上鎖定版本號(hào)的項(xiàng)目幾乎沒人去升級(jí)…
Bundler的FAQ也提到鎖定版本號(hào)的缺點(diǎn):
FAQ:
問(wèn):gem作者不遵守semver規(guī)則怎么辦?
答:放棄使用他的gem!這也應(yīng)該成為選擇gem的衡量標(biāo)準(zhǔn)之一。曾經(jīng)rubygems自己沒有遵守這個(gè)規(guī)則,1.8.x系列修改了Public API導(dǎo)致大量gem安裝出現(xiàn)問(wèn)題。 Loren Segal 從rubygems fork出了SlimGems,并且承諾長(zhǎng)期維護(hù)和1.3.7兼容的API。
問(wèn):如果升級(jí)Patch版本號(hào)真的出現(xiàn)問(wèn)題了怎么辦?
答:哪個(gè)gem出問(wèn)題了找到問(wèn)題的原因解決問(wèn)題,如果解決不了可以不升級(jí)那個(gè)gem
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/562.html
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...
摘要:是一個(gè)優(yōu)雅的行為驅(qū)動(dòng)開發(fā)方案。使用編寫,但是它不僅適用于,還適用于其他語(yǔ)言使用進(jìn)行瀏覽器測(cè)試。此外,還支持大量的測(cè)試工具和網(wǎng)站框架,詳情見此。學(xué)習(xí)資源官方培訓(xùn)項(xiàng)目主頁(yè)編撰 cucumber 是 一個(gè)優(yōu)雅的BDD(行為驅(qū)動(dòng)開發(fā))方案。 showImg(http://segmentfault.com/img/bVcdje); 示例 Feature: Search courses ...
摘要:但我還是使用它開發(fā)了很多軟件。那么問(wèn)題就很明顯了為什么今天還在使用除了個(gè)人理想主義的偏好以外,還有很多理由。為什么使用而不是也許和比較的最重要的語(yǔ)言是。為什么選擇而不是你已有專業(yè)知識(shí)或者在使用庫(kù)。 showImg(https://segmentfault.com/img/remote/1460000018390090?w=790&h=466); 我們來(lái)開門見山地說(shuō)。? PHP 是一門奇...
閱讀 3383·2023-04-26 02:41
閱讀 2415·2023-04-26 00:14
閱讀 2751·2021-08-11 10:22
閱讀 1254·2019-12-27 11:38
閱讀 3540·2019-08-29 18:34
閱讀 2327·2019-08-29 12:13
閱讀 2921·2019-08-26 18:26
閱讀 1795·2019-08-26 16:49