如何查找安装在 ./vendor/bundle 和 "bundle doctor" 中的本机扩展 gem
How to find native extension gems installed in ./vendor/bundle with "bundle doctor"
我们使用 Docker 图像来 运行 CI 构建。 Docker 图像具有系统安装的 Ruby。 Docker 容器包含 gem env
and bundle 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
然后我们 tar 红色整个目录,包括 ./vendor/bundle
以便我们稍后可以使用 capistrano
部署内容。在部署机器上,我们首先取消tarred 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 env
and bundle env
内容如链接
目前我所知道的:
- 我发现所有扩展都安装在
./vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/
中。如果我将该目录重命名为 2.5.0
,它会起作用。
- 可能与此有关issue。
我们用来设置 ruby 和捆绑器的 Dockerfile
类似于 this one。
我们部署捆绑 gem 的机器是 RHEL 机器,并从软件集合存储库安装 ruby。
部署机器 ruby 似乎是使用 --enable-shared=yes
标志构建的。
我们更改了 Dockerfile
以使用相同的方式配置 ruby 构建,./configure --enable-shared=yes
。这解决了我们的问题。
我们使用 Docker 图像来 运行 CI 构建。 Docker 图像具有系统安装的 Ruby。 Docker 容器包含 gem env
and bundle 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
:
bundle config --local path vendor/bundle
bundle install --jobs 5 --retry 3
然后我们 tar 红色整个目录,包括 ./vendor/bundle
以便我们稍后可以使用 capistrano
部署内容。在部署机器上,我们首先取消tarred 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 env
and bundle env
内容如链接
目前我所知道的:
- 我发现所有扩展都安装在
./vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/
中。如果我将该目录重命名为2.5.0
,它会起作用。 - 可能与此有关issue。
我们用来设置 ruby 和捆绑器的 Dockerfile
类似于 this one。
我们部署捆绑 gem 的机器是 RHEL 机器,并从软件集合存储库安装 ruby。
部署机器 ruby 似乎是使用 --enable-shared=yes
标志构建的。
我们更改了 Dockerfile
以使用相同的方式配置 ruby 构建,./configure --enable-shared=yes
。这解决了我们的问题。