Gemfile 中的宝石顺序有影响吗?

Posted

技术标签:

【中文标题】Gemfile 中的宝石顺序有影响吗?【英文标题】:Does the order of gems in your Gemfile make a difference? 【发布时间】:2013-05-19 10:34:54 【问题描述】:

您列出宝石的顺序重要吗?这两个块是等价的吗?

gem 'carrierwave'
gem 'rmagick'

gem 'rmagick'
gem 'carrierwave'

【问题讨论】:

好吧,评论有点啰嗦,但 CarrierWave 没有正确地将图像 url 写入模型。我将删除所有内容并重新开始。如果这不起作用,我会提供更多信息。 您在使用fog 存储吗?文件存储不应该存储url,而是文件名。 url是根据配置生成的。 我使用的是fog。事实上,就在那时,一切都破裂了。但是object.image => nil 无论如何,所以什么都没有被保存。 【参考方案1】:

Bundler 不会按照您列出它们的顺序加载 gem 依赖项*,但它会使用以下标准按源优先级进行:

    显式路径或 git 选项附加到 gem 依赖项,例如:

    gem 'some-gem', github: 'somebody/some-gem'
    

    为其他 gem 依赖项隐式需要的 gem 显式定义的依赖项,即 gem 'rails' 隐式需要 gem 'actionmailer' gem

    如果您添加了多个来源,它将从最后一个到第一个搜索。

见http://gembundler.com/v1.3/man/gemfile.5.html#SOURCE-PRIORITY


* 编辑: 根据 Matt 的回答,取决于您要执行的操作(或您正在加载的宝石),顺序 MIGHT 很重要。见Even with bundler your gem order can be significant。

【讨论】:

您说的是检查 gem 的来源的顺序,但我认为问题在于 Gemfile 中 gem 语句的顺序是否重要——我相信答案是肯定的.【参考方案2】:

当你使用Bundle.require(Rails 使用)时,需要 Gems 按照它们在 Gemfile 中出现的顺序。 In 并不总是这样,但has been this way for a while。

由于 Carrierwave 在需要时明确要求 RMagick,我认为这对您的情况无关紧要;但严格来说,这两个块并不等价。

【讨论】:

以上是关于Gemfile 中的宝石顺序有影响吗?的主要内容,如果未能解决你的问题,请参考以下文章

ruby Gemfile - 最喜欢的宝石

如何在我的 Gemfile 中找到未使用的宝石

ruby 解析Gemfile.lock,从rubygems下载所有宝石,然后将它们上传到geminabox的本地实例

在 Rails 中 Gemfile 有啥用?

你已经激活了 rack 1.6.0,但是你的 Gemfile 需要 rack 1.6.4。在你的命令前加上 `bundle exec` 可以解决这个问题。 (宝石::加载错误)

我可以在 gemfile 中强制 gem 的依赖项吗?