Как обновить Gemfile.замок на узел Docker?

при использовании рельсов внутри контейнера Docker несколько посты (включая один на docker.com) используйте следующий шаблон:

  1. на Dockerfile do ADD Gemfile и ADD Gemfile.lock, потом RUN bundle install.
  2. создать новое приложение Rails с docker-compose run web rails new.

так как мы RUN bundle install чтобы построить изображение, кажется, целесообразно docker-compose build web после обновления Gemfile.

это работает так как gemset будет обновляться внутри изображения, но:

на Gemfile.lock на хосте Docker не будет обновляться чтобы отразить изменения Gemfile. Это проблема, потому что:

  1. Gemfile.lock должно быть в вашем репозитории, и:

  2. он должен быть!--31-->последовательный С вашего текущего Gemfile.


так:

как можно обновить Gemfile.lock на хосте, поэтому он может быть проверен на контроль версий?

3 ответов


исполнение bundle внутри run тут обновить Gemfile.lock на хозяина:

docker-compose run web bundle

однако: вы должны еще и build еще раз.


TL; DR - внесите изменения в контейнер, запустите пакет на контейнере и перезапустите для хорошей меры. Локально эти изменения будут отражены в вашем приложении и готовы к тестированию/выталкиванию в git, и ваш производственный сервер будет использовать его для перестройки.

Долго; Читать:

  1. docker exec -it name_of_app_1 bash

  2. vim Gemfile и поставить что-то вроде gem 'sorcery', '0.9.0' Я чувствую, что это гарантирует, что вы получите версии вы ищу

  3. bundle чтобы получить только эту версию в текущем контейнере Gemfile и Gemfile.lock

это был полу нормальный тип" рельсов " здесь, просто вы делаете это на контейнере, который работает. Теперь вам не нужно беспокоиться о git и получать эти изменения. ваше git-РЕПО, потому что все эти изменения происходят на вашей локальной копии. Итак, откройте вкладку терминала и перейдите в свое приложение и less Gemfile и вы должны увидеть изменения.

  1. теперь вы можете перезапустить запущенный контейнер. Ваш Dockerfile будет перестроен (в моем случае docker-compose up локально, тесты должны пройти. Тест браузера по желанию.

зафиксируйте изменения в git и используйте процесс развертывания, чтобы проверить его на этапе.

Примечания:

проверяем, что Dockerfile как говорят ссылки OP. Я предполагаю, что у вас есть какой-то bundle или bundle install линия в Dockerfile


чтобы быть ясным, команды для запуска:

docker-compose run web bundle
docker-compose up --build

здесь web это имя вашего приложения Dockerized Rails.