当BUNDLE_PATH由Docker更改时,由bundler找不到的安装的gem

我正在使用docker来开发一个rails应用程序。 docker文件如下所示:

FROM ruby:1.9.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev vim ENV APP_HOME /next-reg RUN mkdir $APP_HOME WORKDIR $APP_HOME ENV BUNDLE_PATH /box ADD . $APP_HOME RUN gem install gem1.gem gem2.gem COPY Gemfile Gemfile COPY Gemfile.lock Gemfile.lock RUN bundle install 

正如你所看到的,我改变了bundle_path ,这是因为一篇文章展示了我们如何坚持gem下载。 因此,当dockercaching变暖时,加class,它重新捆绑,并采取永远。

当我docker build成功安装gem,然后它无法在捆绑中find它们。 有人能给我一个持久的gem,安装我自己的gem,并得到它的工作?

在更改BUNDLE_PATH之前,构build工作,它只是经常捆绑而不更改gem文件(因为,我猜Docker的图像caching变暖了)。

我的docker写作是这样的:

 db: image: postgres volumes: - ~/.docker-voumes/postgres/data:/var/lib/postgresql/data # This is to hold and persist ruby gems, referenced in web and in web's dockerfile. gem_files: image: busybox volumes: - /box web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/next-reg volumes_from: - gem_files ports: - "3000:3000" - "8000:8000" links: - db env_file: - .myenv.env 

如果有人需要一个答案:

我认为你的代码中缺lessGEM_HOME / GEM_PATH。

GEM_HOME / GEM_PATH将被gem install xxx用来在特定文件夹中安装gems。 捆绑安装将使用BUNDLE_PATH将gem安装在特定的文件夹中,而不是由gem install xx安装

要有一个工作系统,你应该这样做:

 FROM ruby:1.9.3 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev vim ENV APP_HOME /next-reg RUN mkdir $APP_HOME WORKDIR $APP_HOME ENV BUNDLE_PATH /box ENV GEM_PATH /box ENV GEM_HOME /box ADD . $APP_HOME RUN gem install bundler RUN gem install tzinfo -v 1.2.2 COPY Gemfile Gemfile RUN bundle install 

有了这个Gemfile:

 source 'https://rubygems.org' gem 'tzinfo', '1.2.2' 

这将产生:

第11/13步:运行gem install tzinfo -v 1.2.2
  --->跑8a87fa54fa19
成功安装了thread_safe-0.3.6
成功安装了tzinfo-1.2.2
安装了2颗gem
  ---> 3c91d59bde8a
卸下中间容器8a87fa54fa19

步骤13/13:运行捆绑安装
  --->在20f1e4ec93b1中运行
不要以root身份运行Bundler。  Bundler可以要求sudo,如果需要的话
以root用户身份安装捆绑软件将会破坏所有非root用户的应用程序
这台机器上的用户。
从https://rubygems.org/获取gem元数据...
从https://rubygems.org/获取版本元数据。
解决依赖关系...
 Rubygems 1.8.23.2不是线程安全的,所以你的gem将一次安装一个。 升级到Rubygems 2.1.0或更高版本以启用并行gem安装。
安装rake 12.0.0
使用thread_safe 0.3.6
使用捆绑器1.14.6
 使用tzinfo 1.2.2
捆绑完成!  2个Gemfile依赖关系,现在安装了4个gems。
捆绑的gem被安装到/框中。

正如你可以在结果输出中看到的那样, bundle install重新使用gem install的预装gems