Cześć!
Ostatnio zacząłem moją przygodę z dockerem i mam kłopot z poprawnym użyciem bundlera w moich “zdokeryzowanych” aplikacjach. Problem polega na tym, że ilekroć dodaję nowy gem do mojego Gemfile
, to nie wystarcza jedynie odpalenie docker-compose run app bundle install
(próba uruchomienia aplikacji wywala Bundler::GemNotFound: Could not find [gem którego dodałem do gemfile] in any of the sources
. Jedyna opcja to przebudowanie obrazu (docker-compose build
) i dopiero po tym - uruchomienie bundle install.
Jak możęcie się domyślić jest to mocno uciążliwe bo sprowadza się do uruchamiania bundle install dwa razy (z czego pierwszy instaluje WSZYSTKIE gemy od zera) - czyli zajmuje to kupę czasu. Poniżej moje pliki:
Dockerfile
FROM ruby:2.3.3-slim
RUN apt-get update && apt-get install -y \
build-essential \
cmake \
git \
libpq-dev \
curl \
python \
pkg-config \
imagemagick
ENV APP_HOME=/app
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
COPY Gemfile* ./
COPY modules ./modules
RUN gem install bundler
RUN echo '{ "allow_root": true }' > /root/.bowerrc
RUN bundle install --jobs 20 --retry 5
COPY . ./
EXPOSE 3000
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
HEALTHCHECK CMD curl --fail http://0.0.0.0:3000/healthcheck || exit 1
docker-compose.yml
version: '3'
services:
app: &app_base
build:
context: .
dockerfile: Dockerfile.dev
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
ports:
- 3001:3000
links:
- database
- redis
volumes:
- .:/app
environment: &app_environment
DATABASE_URL: postgres://postgres@database:5432/nemu_development?pool=25&encoding=unicode&schema_search_path=public
REDIS_URL: redis://redis:6379
# Run the app in the 'development' environment:
RACK_ENV: development
RAILS_ENV: development
env_file:
- ./.env.development
database:
image: postgres:9.4-alpine
ports:
- 5432
redis:
image: redis:3.0.7-alpine
ports:
- 6379
mailcatcher:
image: voizzzzzz/mailcatcher-alpine
ports:
- 1025:1025
- 1080:1080
Mam wrażenie, że umyka mi jakiś detal. Spotkaliście się z czymś takim albo wiecie może co robię nie tak? Z góry dzięki za pomoc
Edit: Sorry, jednak wystarczy przebudować obraz. Ale to i tak kiepskie rozwiązanie bo instalowanie gemów od zera zajmuje masę czasu.