首页 > 解决方案 > 我可以从 Gemfile.lock 文件重建 Gemfile 吗?

问题描述

我想复制一个较旧的应用程序,但bundle install由于 Gemfile 已过时并且不再捕获兼容版本而失败。我想我可以通过 err 和 Trial 尝试正确的 Gemfile,但我可以以某种方式使用在另一个较旧且有效的安装中自动生成的 Gemfile.lock 来获取有关兼容版本的信息吗?

有没有办法从 Gemfile.lock 生成一个 Gemfile(具有精确版本)或更新现有的?看起来这个文件使用了与 Gemfile 不同的语法。

更新。我没有找到任何脚本来从 Gemfile.lock 构建 Gemfile,但是在我从工作安装复制 Gemfile.lockbuild install之后

标签: rubybundlergemfilegemfile.lock

解决方案


使用源,卢克!

如果您有源代码控制,请回顾您的历史以找到您的 Gemfile 或应用程序或 gem 的 gemspec。bundle install如果您只有一个 Gemfile.lock,那么只要 Bundler 具有可以访问的有效 gem 源,您就应该能够构建应用程序。

您还可以 greprequire关键字的源代码,并至少确定您要查找的模块。您还可以查看 Gemfile.lock 中的顶级项目,以查看构建 lockfile 时 Gemfile 或 gemspec 中的内容。

例如,Sinatra 的 Gemfile.lock 的一部分列出了以下依赖项:

DEPENDENCIES
  activesupport (~> 5.1.6)
  json
  minitest (~> 5.0)
  nokogiri (!= 1.5.0)
  puma
  rack!
  rack-protection!
  rack-test (>= 0.6.2)
  rake
  sinatra!
  sinatra-contrib!
  twitter-text (= 1.14.7)
  yard

其他部分与由于核心依赖关系而被引入的源、约束和其他依赖关系有关。重建 Gemfile 所需的一切都在那里,但据我所知,没有任何工具可以为你做这件事,因为 Gemfile.lock 是Gemfile 构建的,而不是相反。

虽然没有简单的方法将 Gemfile.lock 逆向工程为 Gemfile 或 gemspec,但您当然可以从键下的顶级条目以及键中构建一个。specs:DEPENDENCIES

也可以看看


推荐阅读