ruby - 我可以从 Gemfile.lock 文件重建 Gemfile 吗?
问题描述
我想复制一个较旧的应用程序,但bundle install
由于 Gemfile 已过时并且不再捕获兼容版本而失败。我想我可以通过 err 和 Trial 尝试正确的 Gemfile,但我可以以某种方式使用在另一个较旧且有效的安装中自动生成的 Gemfile.lock 来获取有关兼容版本的信息吗?
有没有办法从 Gemfile.lock 生成一个 Gemfile(具有精确版本)或更新现有的?看起来这个文件使用了与 Gemfile 不同的语法。
更新。我没有找到任何脚本来从 Gemfile.lock 构建 Gemfile,但是在我从工作安装复制 Gemfile.lockbuild install
之后
解决方案
使用源,卢克!
如果您有源代码控制,请回顾您的历史以找到您的 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
也可以看看
推荐阅读
- bash - bash 脚本在它打开的奇异容器中执行操作
- android - java.lang.VerifyError:拒绝尝试对错误类进行子类化的类
- python - chatterbot:我的聊天机器人无法训练
- angular - NgZone 在服务中未定义
- python - 链接 boost::python::numpy 的问题
- python - 二维函数的俯视图
- c# - 在使用#if 检查时,未定义的变量不应该引发异常吗?
- r - 将使用 R 创建的 CSV 导入 Postgres 的无效字节序列
- c# - SQL浮点列可以用来保存C#双精度值吗?
- image-processing - Javafx 图片到低多边形艺术转换器