我正在使用具有依賴項的Gem,其版本必須因安裝了的時根據運行的Ruby版本而異。具體而言,當前版本的nio4r
gem需要Ruby版本> = 2.2.2,而需要nio4r
的async
gem理想情況下應該能夠在任何Ruby版本> = 2.0的條件下運行。如何在Gem安裝時指定Gem依賴版本
我試圖把一些代碼到gemspec文件變化的版本,但它似乎是,當創業板建,而不是當它是安裝執行它。換句話說,nio4r版本根據用於構建gem的任何版本的Ruby來硬編碼到gem中。這裏是我在gemspec中嘗試的代碼(say
是一個OS X命令,用於說出一個字符串,並且對知道發生了什麼以及什麼時候非常有幫助;稍後我會將其刪除)。
# Recent versions of nio4r require a Ruby version >= 2.2.2.
# If the version used is earlier, load an earlier version of nio4r.
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.2.2')
`say Installing latest version of nio4r`
spec.add_runtime_dependency "nio4r"
else
`say Installing nio4r version 1.2.1`
spec.add_runtime_dependency "nio4r", '1.2.1'
end
正如我所說的,這是創業板build
執行,而不是install
。我知道,我可以使用bundler
這種東西,並把規範放在Gemfile
,但據我所知,該文件將不會被使用,當寶石是gem install
'編輯。
我怎樣才能獲得依賴的寶石版本在寶石安裝時變化?
我正在尋找一個自動化的解決方案,也就是說,不涉及任何這個寶石的用戶干預。另外,由於安裝了另一個gem,該gem將被安裝,所以我不希望用戶必須跟上對其依賴gem的更改,並且必須手動修改Gemfile。這可能會違反德米特法。
謝謝,但我要找的是自動化的解決方案,那就是,不涉及此寶石用戶的任何干預。另外,由於安裝了另一個gem,該gem將被安裝,所以我不希望用戶必須跟上對其依賴gem的更改,並且必須手動修改Gemfile。這可能會違反德米特法。我應該提到的是,我現在就要這樣做。 –