Wenn Sie Rails in einem Docker-Container verwenden mehrere posten (einschließlich one on docker.com ) verwenden das folgende Muster:
Dockerfile
tun ADD Gemfile
und ADD Gemfile.lock
, dann RUN bundle install
. docker-compose run web rails new
. Da wir RUN bundle install
zum Erstellen des Images verwenden, scheint es nach dem Aktualisieren von docker-compose build web
angebracht zu sein, Gemfile
.
Dies funktioniert so, als ob der Edelsteinsatz innerhalb des Bildes aktualisiert wird, aber:
Gemfile.lock
auf dem Docker-Host wird nicht aktualisiert , um die Änderungen an Gemfile
zu berücksichtigen. Dies ist ein Problem, weil:
Gemfile.lock
sollte in Ihrem Repository sein und:
Es sollte konsistent mit Ihrer aktuellen Gemfile
sein.
Also:
Wie kann man das Gemfile.lock
auf dem Host aktualisieren, damit es in die Versionskontrolle eingecheckt werden kann?
TL; DR - Nehmen Sie die Änderungen am Container vor, führen Sie das Bundle für den Container aus, und starten Sie den Vorgang erneut. Lokal werden diese Änderungen in Ihrer App widergespiegelt und sind bereit, sie zu testen / zu pushen, und Ihr Produktionsserver wird sie für den Wiederaufbau verwenden.
docker exec -it name_of_app_1 bash
vim Gemfile
und etwas wie gem 'sorcery', '0.9.0'
eingeben Ich glaube, das stellt sicher, dass Sie die gesuchte Version erhalten
bundle
, um nur diese Version in den Gemfile
und Gemfile.lock
Dies ist ein halb normaler "Rails" -Typ hier, nur Sie tun es auf dem Container, der läuft. Jetzt müssen Sie sich keine Gedanken mehr über Git machen und diese Änderungen erhalten. Ihr Git Repo, weil diese Änderungen alle auf Ihrer lokalen Kopie geschehen. So wie, öffnen Sie einen Terminal-Tab und gehen Sie in Ihre App und less Gemfile
und Sie sollten die Änderungen sehen.
docker-compose up
lokal, Tests sollten bestanden werden. Browser-Test nach Belieben. Übernehmen Sie Ihre Änderungen in git und verwenden Sie Ihren Bereitstellungsvorgang, um das Staging zu überprüfen.
Überprüfen Sie, dass Dockerfile
wie die Links des OPs sagen. Ich nehme an, dass Sie eine Art bundle
oder bundle install
Zeile in Ihrem Dockerfile
Tags und Links ruby-on-rails bundler docker