【问题标题】:Is it possible to override gemfile for local development?是否可以覆盖 gemfile 以进行本地开发?
【发布时间】:2018-02-19 10:08:16
【问题描述】:

我们的 git 存储库中当前有一个 Gemfile。但是,我只在我的环境中本地使用了一个 gem(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile,但是每次我检查到我们的 master/dev 主分支时,由于与跟踪的 gemfile 冲突,我必须删除它。

我想要的是 Gemfile.local 之类的东西,它将继承从 Gemfile 导入的 gem,但也允许在那里导入新的 gem,以便仅在我的机器上使用。在.gitignore 中将忽略此文件。这甚至可能吗?

【问题讨论】:

标签: ruby rubygems gemfile


【解决方案1】:

设置BUNDLE_GEMFILE环境变量:

BUNDLE_GEMFILE=Gemfile.local bundle exec rails c

要仅在 Gemfile.local 中提供“增量”,请将 require_relative 'Gemfile' 放在其顶部(或 @MichaelKohl 在 cmets 中建议的 Bundler::Dsl#eval_gemfile。)

【讨论】:

  • 问题是关于添加一个 new gem,而不是重定向现有的。
  • 是的,第二个会有点用。除了Gemfile.local 必须是一个完全自给自足的gemfile(提示将其同步到主分支的问题)。我想象 Luis 会问:有没有办法向主 Gemfile 提供一个本地的、被 git 忽略的 delta ?一个补丁,如果你愿意的话。
  • 我猜可以简单地 load 来自本地的主要 gemfile,然后提供增量。
  • 或者使用Bundler::Dsl#eval_gemfile来达到这个目的。
  • 这行得通,谢谢。我用过Bundler::Dsl#eval_gemfile :)
【解决方案2】:

将以下代码放在您的Gemfile.local 顶部以加载现有的gemfile

if File.exists?('Gemfile') then
  eval File.read('Gemfile')
end

它将从现有的Gemfile 加载所有宝石。您也可以根据需要添加新的宝石。

运行以下命令从新的Gemfile.local 安装 gem:

bundle install --gemfile=Gemfile.local

【讨论】:

  • 即使我接受了下面的答案,这个也可以。我发现使用Gemfile::Dsl.new.eval_file 更干净:)
  • 谢谢,它更干净了。
猜你喜欢
  • 1970-01-01
  • 2017-01-08
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多