我刚刚开始在轨道上使用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