Tar 一个打包器项目并发送到另一个系统

Tar a bundler project and send to another system

我有两个系统使用用 ruby 编写的相同命令行界面。一个系统正在使用与我们编写的脚本不兼容的旧版本。我们想使用 bundler 在我们自己的系统上下载 2.0 的所有依赖项,然后将 bundle 迁移到具有旧版本的系统,以便我们可以使用 2.0 还有。

我们无法在其他系统上选择 运行 bundle install,因为它不对 Internet 开放。

所以这个想法在我的系统中:

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/ 下!!

看起来他们安装了不同版本的 rubyruby-gems

可能值得尝试使您的第二个 Gemfile(无法访问互联网的那个)使用路径引用这些 Gem。

gem some_gem, path: "/home/you/some_path/some_gem"

有关详细信息,请参阅 this question

如果您无法访问 Internet 但可以传输文件,那么也值得传输新版本 bundler/RubyGems 的源代码。

从同事那里得到了一些帮助,要点是我做错了。

如果您想传输 gems 并查看与 bundler 一致的性能,请执行此操作。

  1. bundle install <gem>
  2. bundle package
    • 这会为已下载的 gem 创建缓存以供传输。
  3. tar -czf ./transport.tar.gz ./Gemfile ./Gemfile.lock ./vendor

在下一台机器上:

  1. tar -xzf ./transport.tar.gz
  2. bundle exec <command>