【问题标题】:Can I rebuild a Gemfile from a Gemfile.lock file?我可以从 Gemfile.lock 文件重建 Gemfile 吗?
【发布时间】:2021-12-02 07:19:58
【问题描述】:

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

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

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

【问题讨论】:

  • 我不清楚你的情况。请显示您遇到的错误。如果您的 Gemfile 丢失,当您 bundle install 时,您会看到“Could not locate Gemfile”,所以我不知道您将如何得到找不到 gem 版本的错误。如果 Gemfile.lock 中的 gem 版本不在 gem 源中,生成 Gemfile 不会改变它;您需要找到 gem 版本或使用不同的版本。
  • 我不确定从什么错误开始。我假设现有安装中的 Gemfile.lock 对于给定的 ruby​​ 版本具有工作/可通过的 gem 版本。所以我希望建立一个相同版本的Gemfile。将 Gemfile.lock 重命名为 Gemfile 不起作用,bundle install 报告语法错误。
  • 不,这不是 Gemfile.lock 的工作方式。如果您没有使用 Bundler 出售您的 gem,那么 Gemfile.lock 所做的只是指定您需要的版本,而不是您拥有的版本。
  • 不确定我是否理解供应商一词。是不是代表bundle install命令安装?
  • 根据文档,在开发应用程序一段时间后,将应用程序连同 Gemfile 和 Gemfile.lock 快照一起签入。现在,您的存储库记录了您上次使用的所有 gem 的确切版本,您确定应用程序可以正常工作...

标签: ruby bundler gemfile gemfile.lock


【解决方案1】:

使用源,卢克!

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

您还可以用 grep 查找 require 关键字的源代码,并至少确定您要查找的模块。您还可以查看 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 构建的,而不是相反。 p>

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

另见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2021-09-16
    相关资源
    最近更新 更多