在Docker容器中使用Rails时
一些 帖子, (包含 在docker.com上有一个)使用以下模式:
- 在
Dockerfile 做 ADD Gemfile 和 ADD Gemfile.lock, 然后 RUN bundle install。
- 使用创建一个新的Rails应用程序
docker-compose run web rails new。
因为我们 RUN bundle install 建立图像,似乎是合适的 docker-compose build web 更新后 Gemfile。
这可以在gemset更新的情况下工作 在图像内,但是:
该 Gemfile.lock 在Docker主机上 将不会更新 反映变化 Gemfile。这是一个问题,因为:
Gemfile.lock 应该在你的存储库中,和:
它应该是 一贯 用你当前的 Gemfile。
所以:
如何更新 Gemfile.lock 在主机上,所以可以检入版本控制?
执行 bundle 内 run 不 更新 Gemfile.lock 在主持人:
docker-compose run web bundle
但是:你必须仍然 也 build 再次成像。
执行 bundle 内 run 不 更新 Gemfile.lock 在主持人:
docker-compose run web bundle
但是:你必须仍然 也 build 再次成像。
TL; DR - 对容器进行更改,在容器上运行bundle并重新启动以获得良好的度量。本地这些更改将反映在您的应用程序中,并准备测试/推送到git,您的生产服务器将使用它进行重建。
长;读:
docker exec -it name_of_app_1 bash
vim Gemfile 并把类似的东西 gem 'sorcery', '0.9.0' 我觉得这可以确保您获得所需的版本
bundle 在当前容器中获取此版本 Gemfile 和 Gemfile.lock
这是半正常的“Rails”类型的东西,只是你在正在运行的容器上这样做。现在你不必担心git并将这些更改发现。你的git repo,因为这些更改都发生在你的本地副本上。所以,打开一个终端选项卡,然后进入你的应用程序 less Gemfile 你应该看到变化。
- 现在您可以重新启动正在运行的容器您的Dockerfile将被重建(在我的情况下由
docker-compose up 在本地,测试应该通过。浏览器测试随意。
将您的更改提交给git并使用您的部署过程在暂存时检查它。
笔记:
检查一下 Dockerfile 比如OP的链接说。我假设你有某种 bundle 要么 bundle install 在你的线 Dockerfile
为了清楚起见,运行的命令是:
docker-compose run web bundle
docker-compose up --build
哪里 卷筒纸 是Dockerized Rails应用程序的名称。