ruby 我怎么知道一个gem与某个版本的rails兼容?

disho6za  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(129)

我刚刚开始使用ruby on rails,当我遵循教程时,没有解释某些gem是如何收集和放置在Gemfile中的。我只是复制和粘贴它们,并把它们放在我的Gemfile和运行捆绑安装。
如何下载特定版本的gems及其依赖项,并确保它们与我使用的rails版本兼容?

yjghlzjz

yjghlzjz1#

如果你没有指定Gem版本,Bundler会根据你当前的Rails版本来确定安装哪个版本。通常Bundler在无法安装您指定的版本时也会警告您。

gem 'gemname'

这将安装与您的Rails版本兼容的任何版本。

gem 'gemname', '1.5'

只有当它支持您当前的Rails版本时,才会安装版本1.5。

gem 'gemname',  '>=1.0'

这将安装1.0或更高版本(如果可用且兼容)。
如果你想安装一个特定的版本(2.2),但你知道3.0版本会破坏你的代码(一些gem会这样做,比如Mailchimp gem),你可以指定一个最低版本和最高版本:

gem 'gemname', '>= 2.2.0', '< 3.0'

由于它或多或少是常见的,因此有一个快捷方式:

gem 'gemname', '~> 2.2'

“~>”将匹配任何小于3.0的版本。它告诉Replayer只安装2.X,永远不要安装3.0。
你想要安装的每个gem都会告诉你哪个版本与你的Rails版本兼容。它通常会显示最小版本号。举个例子,bootstrap gem:
https://rubygems.org/gems/bootstrap/versions/4.0.0.alpha3.1
如果你看一下网站,它会告诉你依赖关系。它没有提到最低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版本,如下所示:

rails >= 4

这意味着你至少需要Rails 4.0。

fv2wmkja

fv2wmkja2#

对于轨道4和轨道5,您可以检查here。宝石是否准备好了。
如果你写gem 'gemname',当你运行bundle install时,Rails会自动安装最适合的gem最新版本。其他答案中提到了Gem版本。
如果gem中需要特定版本的ruby或rails或任何依赖项。然后在gem的gemspec文件和该gem的Gemfile中指定。
你可以在gemspec或gem文件中交叉检查,如果在bundle安装时出现问题。

j0pj023g

j0pj023g3#

在你的gem文件中,你可以列出gems如下:
要加载最新的稳定版本,只需将版本排除在外即可

gem 'gemname'

要加载特定版本,请添加版本

gem 'gemname', '1.0.0' # or whatever version you want to specify

加载一个特定的版本或任何最高的subversion

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

你可以通过运行bundle update来更新gem文件中的gem版本,这取决于你是如何列出它们的(如上所述)。
要知道一个版本是否与您的Rails版本兼容,我通常会查看www.example.com上的发布日期rubygems.org,并与最新的主要Rails版本的发布日期进行比较。在2013年6月到2016年6月之间发布的gem很可能是针对Rails 4的。它可能在Rails 5(2016年6月发布)中工作,也可能不工作。我发现大多数适用于Rails 4的gem都适用于Rails 5,而Rails 5已经发布了足够长的时间,可以记录特定gem兼容性的问题。最后一个发布日期在2013年6月之前的Gem(所以对于Rails 3或更早版本)我会避免。

eni9jsuy

eni9jsuy4#

至于2023年8月,可以使用RailsBump,它是Ready4Rails的延续。

  • P.S:即使是Railsbump也不能保证给予关于某个gem兼容性的明确答案。所以你仍然需要通过测试应用程序来测试兼容性 *

相关问题