【问题标题】:Bundler can't see gems installed in dockerized environmentBundler 看不到安装在 dockerized 环境中的 gem
【发布时间】:2016-11-12 17:38:22
【问题描述】:

我有一个非常基本的“应用程序”,我正在尝试使用互联网上的一些示例对其进行 dockerize,但由于某种原因,捆绑程序似乎无法看到安装在我的环境中的 gem。

宝石文件

source 'https://rubygems.org'
gem 'streamio-ffmpeg'

Dockerfile

FROM dpsxp/ffmpeg-with-ruby:2.2.1
MAINTAINER mike

RUN apt-get update && apt-get install -y \
  build-essential \
  cmake

ENV APP_HOME=/app

RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME

COPY Gemfile* ./
ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile \
  BUNDLE_PATH=/bundle
RUN gem install bundler
RUN bundle install --jobs 20 --retry 5 --path=/bundle

COPY . ./

CMD ["rake"]

docker-compose.yml

version: '2'

services:
  app:
    build:
      context: .
    volumes:
      - '.:/app'
    depends_on:
      - bundle

  bundle:
    image: busybox
    volumes:
      - /bundle

现在,当我运行$ docker-compose run app gem list 时,streamio-ffmpeg gem 由于某种原因不在列表中。另外,当我尝试在我的 ruby​​ 应用程序中使用它时,我收到了LoadError: cannot load such file

构建日志:https://gist.github.com/mbajur/569b4f221cadb8a85ecc5dae8a595401

【问题讨论】:

  • 构建日志在这里是相关的
  • 为什么需要cmake?此外,该捆绑容器似乎也没有做任何有益的事情。 bundle install 命令看起来也会失败。
  • @user2105103 - 添加日志
  • @MattSchuchard - 我正在使用捆绑服务在主应用程序映像构建之间保留我的宝石。 Cmake 确实有点过时了,我只是从其他容器中复制了它,因为使用的其中一个 gem 需要它,但无论如何,我认为这不是原因。
  • CMake 并没有过时。 CMake 是构建 C++ 的标准软件,这就是为什么我问它为什么包含在 ruby​​ 应用程序中的原因。此外,如果您使用捆绑包安装此 gem,则需要使用 bundle 来查找容器内的 gem,而不是 gem。

标签: ruby docker bundler docker-compose


【解决方案1】:

当您通过 bundler 处理 gems 时,所有相关命令都应使用bundle exec 运行,因此在您的情况下,它应该使用以下命令:

docker-compose run app bundle exec gem list

Bundler 通过跟踪和安装所需的确切 gem 和版本,为 Ruby 项目提供一致的环境。

你直接用gem list运行的命令是列出系统gem,当然它们不在列表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多