问题 如何更新Docker主机上的Gemfile.lock?


在Docker容器中使用Rails时 一些  帖子, (包含 在docker.com上有一个)使用以下模式:

  1. Dockerfile 做 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. 它应该是 一贯 用你当前的 Gemfile


所以:

如何更新 Gemfile.lock 在主机上,所以可以检入版本控制?


8324
2018-06-20 16:57


起源



答案:


执行 bundle 内 run   更新 Gemfile.lock 在主持人:

docker-compose run web bundle

但是:你必须仍然   build 再次成像。


7
2018-06-20 16:57



鉴于这需要运行两个单独的命令,我希望有一个替代答案。 - dukedave
是的,这是我发现的最好(唯一)实用的解决方案。我想我将通过组合创建另一个抽象 docker-compose build 和 docker-compose run web bundle 在脚本文件中。万岁的抽象,哈哈 - unforgiven1987
只要您的Dockerfile遵循以下格式,这就可以工作: docs.docker.com/compose/rails 不像我的Dockerfile,它正在使用临时文件 Gemfile 它存储在 /tmp  - 您可以通过运行来检查此问题 bundle env 看看它从哪里获取Gemfile。 - mltsy


答案:


执行 bundle 内 run   更新 Gemfile.lock 在主持人:

docker-compose run web bundle

但是:你必须仍然   build 再次成像。


7
2018-06-20 16:57



鉴于这需要运行两个单独的命令,我希望有一个替代答案。 - dukedave
是的,这是我发现的最好(唯一)实用的解决方案。我想我将通过组合创建另一个抽象 docker-compose build 和 docker-compose run web bundle 在脚本文件中。万岁的抽象,哈哈 - unforgiven1987
只要您的Dockerfile遵循以下格式,这就可以工作: docs.docker.com/compose/rails 不像我的Dockerfile,它正在使用临时文件 Gemfile 它存储在 /tmp  - 您可以通过运行来检查此问题 bundle env 看看它从哪里获取Gemfile。 - mltsy


TL; DR  - 对容器进行更改,在容器上运行bundle并重新启动以获得良好的度量。本地这些更改将反映在您的应用程序中,并准备测试/推送到git,您的生产服务器将使用它进行重建。

长;读:

  1. docker exec -it name_of_app_1 bash

  2. vim Gemfile 并把类似的东西 gem 'sorcery', '0.9.0' 我觉得这可以确保您获得所需的版本

  3. bundle 在当前容器中获取此版本 Gemfile 和 Gemfile.lock

这是半正常的“Rails”类型的东西,只是你在正在运行的容器上这样做。现在你不必担心git并将这些更改发现。你的git repo,因为这些更改都发生在你的本地副本上。所以,打开一个终端选项卡,然后进入你的应用程序 less Gemfile 你应该看到变化。

  1. 现在您可以重新启动正在运行的容器您的Dockerfile将被重建(在我的情况下由 docker-compose up 在本地,测试应该通过。浏览器测试随意。

将您的更改提交给git并使用您的部署过程在暂存时检查它。

笔记:

检查一下 Dockerfile 比如OP的链接说。我假设你有某种 bundle 要么 bundle install 在你的线 Dockerfile


2
2018-06-12 19:59





为了清楚起见,运行的命令是:

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

哪里 卷筒纸 是Dockerized Rails应用程序的名称。


2
2017-11-06 08:17