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.lock,从rubygems下载所有宝石,然后将它们上传到geminabox的本地实例
你已经激活了 rack 1.6.0,但是你的 Gemfile 需要 rack 1.6.4。在你的命令前加上 `bundle exec` 可以解决这个问题。 (宝石::加载错误)