2017-04-22 82 views
4

我剛剛開始在軌道上使用ruby,並且按照教程,沒有解釋如何收集某些寶石並將其放置在Gemfile中。我剛剛複製並粘貼它們,並將它們放入我的Gemfile並運行軟件包安裝。我如何知道一個gem與一個rails版本兼容?

如何去下載特定版本的gem及其依賴關係,以及確保它們與我使用的rails版本兼容?

回答

0

對於導軌4和5,您可以檢查here。如果寶石準備好或沒有。

如果您編寫gem 'gemname',當您運行軟件包安裝時,Rails會自動安裝最適合的最新版本的gem。在其他答案中提到指定寶石版本。

如果寶石中需要特定版本的ruby或rails或任何依賴項。然後在gem和gemfile的gemspec文件中指定該寶石。

如果bundle安裝時出現問題,您可以在gemspec或Gemfile中交叉檢查。

+0

該項目未更新兩年。這是一個好主意,但我認爲它已被棄用 – Mauro

0

在你的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或更早的版本),我避免。

2

如果您未指定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。

+0

「如果您未指定Gem版本,Bundler會根據您當前的Rails版本找出要安裝的版本。」我沒有意識到這一點,所以我做了一個快速的谷歌搜索,沒有發現任何東西......我承認我沒有搜索到任何消息。 Bundler是如何知道什麼版本的rails與gem版本保持一致的? –

+0

我看到,rails會在gem的gemspec文件中作爲依賴項。它也可能位於gem的gemfile(如果有的話),它不會在rubygems上列出,所以你必須去gem的github庫檢查它是否爲gemfile。這並不能保證gem可以使用rails版本,儘管gem所有者可能不會在他們的gemspec或gemfile中列出rails版本限制。對於主要的寶石(例如,設計,回形針),這可能是非常可靠的。 –

+0

你好Steve Carey,Bundler有它自己的網站。你可以在這裏閱讀更多關於它的信息:http://bundler.io/ Bundler的工作是匹配所有的寶石版本,以便它們一起工作。 –

相關問題