如何查找安装在 ./vendor/bundle 中的本机扩展 gem 与 "bundle doctor"



我们使用Docker镜像来运行CI构建。Docker 映像具有系统安装的 Ruby。Docker 容器具有 gist 链接文件中所示的gem envbundle env内容:

[root@045ce9939883 code]# which ruby
/usr/local/bin/ruby
[root@045ce9939883 code]# ruby -v
ruby 2.5.5p157 (2019-03-15 revision 67260) [x86_64-linux]
[root@045ce9939883 code]# bundle -v
Bundler version 2.0.2

我们在 Docker 容器中运行以下命令以在./vendor/bundle处安装 gem:

bundle config --local path vendor/bundle
bundle install --jobs 5 --retry 3

然后,我们将整个目录(包括./vendor/bundle(涂油,以便我们以后可以使用capistrano部署内容。在部署计算机上,我们首先解压缩 tar 文件,然后运行cap deploy命令。

部署计算机上的bundler似乎无法找到使用./vendor/bundle中的本机扩展构建的 gem。它似乎发现所有其他宝石都很好:

[jenkins@tel-web-sob-r01-n01 2.1.10]$ bundle doctor
The following gems are missing
* nokogiri (1.10.9)
* nio4r (2.5.2)
* websocket-driver (0.7.2)
* bindex (0.5.0)
* byebug (9.0.6)
* puma (3.9.1)
* ffi (1.9.18)
Install missing gems with `bundle install
[jenkins@tel-web-sob-r01-n01 2.1.10]$ ls -l ./vendor/bundle/ruby/2.5.0/gems/ | grep nokogiri
drwxr-xr-x 7 jenkins jenkins  157 Jun 22 13:05 nokogiri-1.10.9

部署计算机的gem envbundle env内容链接

到目前为止,我所知道的:

  1. 我发现所有扩展都安装在./vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/.如果我将该目录重命名为2.5.0,它可以工作。
  2. 可能与此问题有关。

我们设置 ruby & bundler 的Dockerfile与此类似。

我们部署捆绑 gem 的计算机是 RHEL 计算机,并从软件集合存储库安装 Ruby。

似乎部署机器 ruby 是用--enable-shared=yes标志构建的。

我们更改了Dockerfile,以相同的方式配置 ruby 构建,./configure --enable-shared=yes.这解决了我们的问题。

最新更新