当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