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

时间:2016-06-20 16:57:58

标签: ruby-on-rails docker bundler

在Docker容器中使用Rails时 several posts,(包括one on docker.com)使用以下模式:

  1. Dockerfile执行ADD GemfileADD Gemfile.lock,然后RUN bundle install
  2. 使用docker-compose run web rails new创建新的Rails应用。
  3. 由于我们RUN bundle install要构建图片,因此在更新docker-compose build web后似乎适合Gemfile

    这样做可以在图像中更新,但是:

    Docker主机上的Gemfile.lock将不会更新以反映Gemfile的更改。这是一个问题,因为:

    1. Gemfile.lock should be in your repository,以及:

    2. 与您当前的Gemfile 一致

    3. 所以:

      如何更新主机上的Gemfile.lock,以便可以将其签入版本控制?

3 个答案:

答案 0 :(得分:7)

bundle 内执行run确实更新主机上的Gemfile.lock

docker-compose run web bundle

但是:您仍然必须再次 build图片。

答案 1 :(得分:3)

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

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

其中 web 是您的Dockerized Rails应用程序的名称。

答案 2 :(得分:2)

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

长;读:

  1. docker exec -it name_of_app_1 bash

  2. vim Gemfile并添加类似gem 'sorcery', '0.9.0'的内容我觉得这可以确保您获得正在寻找的版本

  3. bundle在当前容器GemfileGemfile.lock

  4. 中获取此版本

    这是半正常的" Rails"在这里输入内容,只是你在正在运行的容器上进行操作。现在你不必担心git并将这些变化带到。你的git repo,因为这些更改都发生在你的本地副本上。所以,打开一个终端标签页然后进入您的应用less Gemfile,您就会看到更改。

    1. 现在您可以重新启动正在运行的容器。您的Dockerfile将在本地重建(在我的情况下由docker-compose up,测试应该通过。浏览器测试随意。
    2. 将您的更改提交给git并使用您的部署过程在暂存时检查它。

      说明:

      检查Dockerfile是否与OP的链接相同。我假设您bundle

      中有某种bundle installDockerfile