在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应用程序的名称。