ruby - 如何使用“bundle doctor”查找安装在 ./vendor/bundle 中的本机扩展 gem
问题描述
我们使用 Docker 镜像来运行 CI 构建。Docker 映像具有系统安装的 Ruby。gem env
Docker 容器的内容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 容器中运行以下命令将 gems 安装在./vendor/bundle
:
bundle config --local path vendor/bundle
bundle install --jobs 5 --retry 3
然后,我们对整个目录进行了 tar 处理,包括./vendor/bundle
以便我们以后可以使用capistrano
. 在部署机器上,我们首先解压缩 tar 文件,然后运行cap deploy
命令。
bundler
在部署机器上似乎无法找到使用./vendor/bundle
. 似乎找到所有其他宝石都很好:
[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
和bundle env
内容链接
到目前为止我所知道的:
- 我发现所有的扩展都安装在
./vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0-static/
. 如果我将该目录重命名为2.5.0
,它可以工作。 - 可能与这个问题有关。
解决方案
我们Dockerfile
用来设置 ruby & bundler 的工具与这个类似。
我们部署捆绑 gem 的机器是 RHEL 机器,并从软件集合存储库安装 ruby。
似乎部署机器 ruby 是用--enable-shared=yes
标志构建的。
我们改变了我们Dockerfile
以相同的方式配置 ruby 构建,./configure --enable-shared=yes
. 这解决了我们的问题。
推荐阅读
- php - php以表格形式发送post vars
- cassandra - 如何列出 Cassandra shell 中的所有用户?
- javascript - js 正则表达式移动浏览器
- python - 1d Array Transformation:将不同大小的组分配到具有特定条件的唯一批次中
- javascript - for循环中的乘法
- java - 使用链表数据结构的 insertBefore 方法面临问题
- google-app-engine - 在 Google App Engine 项目中跨项目移动实例
- c# - 无法从 HyperV Get-Firmware PowerShell Cmdlet 解析 VmBootSource[]
- c++ - 移动窗口库
- javascript - Flask API 上的 json POST 不接受我的论点