【问题标题】:How do I update Gemfile.lock on my Docker host?如何更新 Docker 主机上的 Gemfile.lock?
【发布时间】:2016-06-20 16:57:58
【问题描述】:

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

  1. Dockerfile 中执行ADD GemfileADD Gemfile.lock,然后在RUN bundle install 中。
  2. 使用docker-compose run web rails new 创建一个新的Rails 应用程序。

由于我们是RUN bundle install来构建镜像的,所以更新Gemfile之后似乎适合docker-compose build web

这是因为 gemset 将在图像中更新,但是:

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

  1. Gemfile.lockshould be in your repository,以及:

  2. 它应该与您当前的Gemfile一致


所以:

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

【问题讨论】:

    标签: ruby-on-rails docker bundler


    【解决方案1】:

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

    docker-compose run web bundle
    

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

    【讨论】:

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

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

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

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

    【讨论】:

    • 要更新 gemfile.lock 即更新我的 gem,我需要运行 docker-compose run --rm web bundle update 然后 docker-compose up --build
    【解决方案3】:

    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 中获取此版本

    这是半正常的“Rails”类型的东西,只是你在运行的容器上做。现在您不必担心 git 和获取这些更改。您的 git 存储库,因为这些更改都发生在您的本地副本上。比如,打开一个终端选项卡并进入您的应用程序和less Gemfile,您应该会看到更改。

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

    将您的更改提交到 git 并使用您的部署过程在登台时检查它。

    注意事项:

    检查 Dockerfile 就像 OP 的链接所说的那样。我假设您的Dockerfile 中有某种bundlebundle install

    【讨论】:

      【解决方案4】:

      在容器内运行bundle update,然后重建。

      $ docker-compose run app bundle update
      $ docker-compose build
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-09
        • 2021-08-06
        • 2017-05-02
        • 1970-01-01
        • 1970-01-01
        • 2020-04-25
        • 2017-08-19
        • 1970-01-01
        相关资源
        最近更新 更多