【问题标题】:Tar a bundler project and send to another system打包打包器项目并发送到另一个系统
【发布时间】: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/ 下!

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

【问题讨论】:

  • 这个策略非常脆弱。一些 gem 已经编译了仅适用于非常特定版本的库和特定架构的扩展。如果您想要二进制和可移植的东西,请考虑使用 Docker 之类的东西,您可以在其中打包已部署的图像。

标签: ruby bundler


【解决方案1】:

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

如果您想传输 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>

【讨论】:

    【解决方案2】:

    可能值得一试,让您的第二个 Gemfile(没有 Internet 访问权限的那个)使用路径引用 gem。

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

    有关更多信息,请参阅this question

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多