2016-01-26 1 views
4

Я использую докер для разработки приложения для рельсов. Файл докер выглядит следующим образом:Установленные драгоценные камни, не обнаруженные связующим, когда BUNDLE_PATH изменен с помощью 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, это из-за an article показывает, как мы можем упорствовать загрузки драгоценных камней. Так что сверхурочное время, когда кеш докера нагревается, он снова объединяется и берет FOREVER.

Когда я docker build, он успешно устанавливает драгоценные камни, после чего он не может найти их на связке. Может ли кто-нибудь дать мне руку с сохраняющимися драгоценными камнями, установить мои собственные драгоценные камни и заставить ее работать?

Прежде чем я сменил BUNDLE_PATH, сработала сборка, она просто повторно включалась часто без изменений в файл gem (потому что, я думаю, кеш изображения докеров нагрелся).

Мой докер-Compose, как это:

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 
+0

Я думаю, что веб-служба должна знать и о переменной среды BUNDLE_PATH. – maletor

ответ

2

В случае кому-то нужен ответ:

Я думаю, что есть недостаток GEM_HOME/GEM_PATH в вашем коде.

GEM_HOME/GEM_PATH будет использоваться gem install xxx для установки драгоценных камней в определенной папке. BUNDLE_PATH будет использоваться пачкой установки для установки драгоценных камней в определенной папке, но не самоцвет установка ого

Чтобы иметь рабочую систему, которую вы должны сделать:

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' 

Wich будет производить:

 
Step 11/13 : RUN gem install tzinfo -v 1.2.2 
---> Running in 8a87fa54fa19 
Successfully installed thread_safe-0.3.6 
Successfully installed tzinfo-1.2.2 
2 gems installed 
---> 3c91d59bde8a 
Removing intermediate container 8a87fa54fa19 

Step 13/13 : RUN bundle install 
---> Running in 20f1e4ec93b1 
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and 
installing your bundle as root will break this application for all non-root 
users on this machine. 
Fetching gem metadata from https://rubygems.org/... 
Fetching version metadata from https://rubygems.org/. 
Resolving dependencies... 
Rubygems 1.8.23.2 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation. 
Installing rake 12.0.0 
Using thread_safe 0.3.6 
Using bundler 1.14.6 
Using tzinfo 1.2.2 
Bundle complete! 2 Gemfile dependencies, 4 gems now installed. 
Bundled gems are installed into /box. 

Как вы можете см. в результате вывода, bundle install повторно использовать предварительно загруженные драгоценные камни от gem install

+0

Спасибо! Поэтому мне пришлось определить переменные: ENV GEM_PATH/xxx; ENV GEM_HOME/xxx' вместе с ним. Я попробую это когда-нибудь, спасибо! – jQwierdy

Смежные вопросы