【发布时间】:2016-10-04 02:55:40
【问题描述】:
我有两个使用 ruby 编写的命令行界面的系统。一个系统正在使用与我们编写的脚本不兼容的旧版本。我们想使用 bundler 在我们自己的系统上下载 2.0 的所有依赖项,然后将 bundle 迁移到旧版本的系统上,这样我们也可以在那里使用 2.0。
我们无法在其他系统上运行bundle install,因为它没有对互联网开放。
所以这个想法在我的系统上:
bundle init
...写Gemfile...
bundle install
tar -czf cli2.0.tar.gz ./Gemfile ./Gemfile.lock ./.bundle ./bundle
...将cli2.0.tar.gz移动到另一个系统...
在系统 B 上:
tar -zxf cli2.0.tar.gz
bundle exec cli2.0 version
但此时我们收到一条错误消息,指出bundler 找不到任何宝石,即使它们就在./bundle/ruby/2.3.0/ 下!
看起来他们安装了不同版本的ruby和ruby-gems。
【问题讨论】:
-
这个策略非常脆弱。一些 gem 已经编译了仅适用于非常特定版本的库和特定架构的扩展。如果您想要二进制和可移植的东西,请考虑使用 Docker 之类的东西,您可以在其中打包已部署的图像。