运行bundle或rspec会为Gemfile.lock添加一行

时间:2018-06-08 17:02:52

标签: ruby gemfile.lock

在Ruby项目中运行各种命令(例如bundle和rspec)后,Selenium::WebDriver::Error::WebDriverError: Unable to find Mozilla geckodriver. Please download the server from https://github.com/mozilla/geckodriver/releases and place it somewhere on your PATH. More info at https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver.会更新,并https://github.com/ivandeex/heroku-buildpack-firefox.git添加到Gemfile.lock标题中。为什么会这样?我该如何预防?

运行x86_64-darwin-17会给出这个有趣的背景:

PLATFORMS

3 个答案:

答案 0 :(得分:1)

这是由全局捆绑器配置引起的。设置为false会停止该行为。

  

specific_platform(BUNDLE_SPECIFIC_PLATFORM):允许bundler解析特定的运行平台并将其存储在lockfile中,而不是仅使用通用平台。特定平台是Gem :: Platform.local报告的精确平台三元组,例如x86_64-darwin-16或universal-java-1.8。另一方面,通用平台是诸如ruby,mswin或java之类的平台。在这个例子中,x86_64-darwin-16将映射到ruby和universal-java-1.8到java。

答案 1 :(得分:1)

@RangerRanger的回答对我不起作用,但是我像他一样签入了bundler doc,发现这个人对我有用:

force_ruby_platform(BUNDLE_FORCE_RUBY_PLATFORM):忽略当前机器的平台,仅安装ruby平台gem。结果,具有本机扩展的gem将从源代码编译。

以下是命令:bundle config force_ruby_platform true

答案 2 :(得分:0)

如果您想在不更新Gemfile.lock的情况下安装依赖项,请使用--frozen option。例如bundle --frozen。这将正常安装依赖项,但不更新Gemfile.lock

修改

如果这不是一个好的解决方案,最好的办法是将Gemfile.lock添加到您当地仓库特定的.gitignore。 您可以根据this answer

your_repo/.git/info/exclude创建一个。{