Bundler无法看到在dockerized环境中安装的gem

时间:2016-11-12 17:38:23

标签: ruby docker bundler docker-compose

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

的Gemfile

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"]

搬运工-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

1 个答案:

答案 0 :(得分:2)

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

docker-compose run app bundle exec gem list

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

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