我想复制一个旧的应用程序,但bundle install
失败,因为Gemfile过时了,不再捕获兼容的版本。我想我可以通过错误和试验来尝试正确的Gemfile,但我能以某种方式使用Gemfile吗?锁定在另一个较旧的正常安装中自动生成的,以获取有关兼容版本的信息?
是否有办法从Gemfile生成一个Gemfile(精确的版本)?锁定或更新现有的?看起来这个文件使用的语法与Gemfile不同。
更新。我没有找到任何脚本从Gemfile构建Gemfile。但是,在我复制了Gemfile之后。build install
工作
使用源,路加福音!
如果你有源代码管理,回头看看你的历史记录,找到你的应用程序或gem的Gemfile或gemspec。如果你只有一个Gemfile。然后你应该能够用bundle install
构建应用程序,只要Bundler有有效的gem源可以访问。
您还可以为require
关键字搜索源代码,并至少确定您正在寻找的模块。您还可以查看Gemfile中的顶级项。查看在构建lockfile时Gemfile或gemspec中的内容。
作为一个例子,Gemfile的一部分。lock for Sinatra列出了以下依赖项:
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。锁定到Gemfile或gemspec中,您当然可以从specs:
密钥下的顶级条目构建,以及DEPENDENCIES
密钥。
参见
- https://bundler.io/man/gemfile.5.html
- https://stackoverflow.com/a/44980854/1301972