我剛剛開始在軌道上使用ruby,並且按照教程,沒有解釋如何收集某些寶石並將其放置在Gemfile中。我剛剛複製並粘貼它們,並將它們放入我的Gemfile並運行軟件包安裝。我如何知道一個gem與一個rails版本兼容?
如何去下載特定版本的gem及其依賴關係,以及確保它們與我使用的rails版本兼容?
我剛剛開始在軌道上使用ruby,並且按照教程,沒有解釋如何收集某些寶石並將其放置在Gemfile中。我剛剛複製並粘貼它們,並將它們放入我的Gemfile並運行軟件包安裝。我如何知道一個gem與一個rails版本兼容?
如何去下載特定版本的gem及其依賴關係,以及確保它們與我使用的rails版本兼容?
對於導軌4和5,您可以檢查here。如果寶石準備好或沒有。
如果您編寫gem 'gemname'
,當您運行軟件包安裝時,Rails會自動安裝最適合的最新版本的gem。在其他答案中提到指定寶石版本。
如果寶石中需要特定版本的ruby或rails或任何依賴項。然後在gem和gemfile的gemspec文件中指定該寶石。
如果bundle安裝時出現問題,您可以在gemspec或Gemfile中交叉檢查。
在你的Gemfile你可以列出的寶石如下:
加載最新的穩定版本剛剛離開的版本出來
gem 'gemname'
要加載特定版本,添加版本
gem 'gemname', '1.0.0' # or whatever version you want to specify
加載特定版本或任何最高顛覆是
gem 'gemname', '~> 1.0.0' # this will load version 1.0.x with x being the highest sub-version.
gem 'gemname', '~> 1.0' # will load version 1.x
gem 'gemname', '~> 1.3' # will load version 1.3 or higher but less than 2.0
您可以通過運行軟件包更新,根據您如何列出它們(按上述)更新gemfile中的gem版本。
要知道某個版本是否與您的Rails版本兼容,我通常會在rubygems.org上查看發佈日期,與最新的主要Rails版本的發佈日期進行比較。 2013年6月至2016年6月發佈的寶石很可能會針對Rails 4,它可能會或可能不會在Rails 5(2016年6月發佈)中工作。我發現大多數適用於Rails 4的寶石都可以在Rails 5中工作,並且Rails 5已經足夠長的時間來處理具有特定寶石兼容性的問題了。 Gems在2013年6月之前的最後發佈日期(對於Rails 3或更早的版本),我避免。
如果您未指定Gem版本,Bundler會根據您當前的Rails版本計算出要安裝的版本。通常Bundler會在您無法安裝您指定的版本時發出警告。
gem 'gemname'
這會安裝與您的Rails版本兼容的任何版本。
gem 'gemname', '1.5'
僅當它支持您當前的Rails版本時,纔會安裝1.5版本。
gem 'gemname', '>=1.0'
如果可用且兼容,則安裝版本1.0或更高版本。
如果你想安裝一個特定版本(2.2),但你知道,3.0版將打破你的代碼(有些寶石是這樣做Mailchimp寶石),您可以指定最低版本和最高版本:
gem 'gemname', '>= 2.2.0', '< 3.0'
既然是或多或少共同存在用於此快捷方式:
gem 'gemname', '~> 2.2'
的「〜>」將匹配任何版本小於3.0。它告訴捆綁器只安裝2.X永遠不會達到3.0。
您要安裝的每個gem都會告訴您哪個版本與您的Rails版本兼容。通常它會說最低版本號。例如,自舉寶石:
https://rubygems.org/gems/bootstrap/versions/4.0.0.alpha3.1
如果你在現場看,它告訴你的依賴關係。它沒有提到一個最小的Rails版本,讓您可以隨時安裝最新版本:如果指定了下相關性的Rails的版本是這樣
RUNTIME DEPENDENCIES (2):
autoprefixer-rails >= 6.0.3
sass >= 3.4.19
DEVELOPMENT DEPENDENCIES (13):
actionpack >= 4.1.5
activesupport >= 4.1.5
capybara >= 2.6.0
compass ~> 1.0.3
jquery-rails >= 3.1.0
json >= 1.8.1
minitest ~> 5.8.0
minitest-reporters ~> 1.0.5
poltergeist >= 0
slim-rails >= 0
sprockets-rails >= 2.3.2
term-ansicolor >= 0
uglifier >= 0
:
rails >= 4
這意味着你至少需要Rails 4.0。
「如果您未指定Gem版本,Bundler會根據您當前的Rails版本找出要安裝的版本。」我沒有意識到這一點,所以我做了一個快速的谷歌搜索,沒有發現任何東西......我承認我沒有搜索到任何消息。 Bundler是如何知道什麼版本的rails與gem版本保持一致的? –
我看到,rails會在gem的gemspec文件中作爲依賴項。它也可能位於gem的gemfile(如果有的話),它不會在rubygems上列出,所以你必須去gem的github庫檢查它是否爲gemfile。這並不能保證gem可以使用rails版本,儘管gem所有者可能不會在他們的gemspec或gemfile中列出rails版本限制。對於主要的寶石(例如,設計,回形針),這可能是非常可靠的。 –
你好Steve Carey,Bundler有它自己的網站。你可以在這裏閱讀更多關於它的信息:http://bundler.io/ Bundler的工作是匹配所有的寶石版本,以便它們一起工作。 –
該項目未更新兩年。這是一個好主意,但我認爲它已被棄用 – Mauro