在Docker容器中使用Rails时 several posts,(包括one on docker.com)使用以下模式:
Dockerfile
执行ADD Gemfile
和ADD Gemfile.lock
,然后RUN bundle install
。docker-compose run web rails new
创建新的Rails应用。由于我们RUN bundle install
要构建图片,因此在更新docker-compose build web
后似乎适合Gemfile
。
这样做可以在图像中更新,但是:
Docker主机上的Gemfile.lock
将不会更新以反映Gemfile
的更改。这是一个问题,因为:
Gemfile.lock
should be in your repository,以及:
与您当前的Gemfile
一致。
所以:
如何更新主机上的Gemfile.lock
,以便可以将其签入版本控制?
答案 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,您的生产服务器将使用它来重建。
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
,您就会看到更改。
docker-compose up
,测试应该通过。浏览器测试随意。将您的更改提交给git并使用您的部署过程在暂存时检查它。
检查Dockerfile
是否与OP的链接相同。我假设您bundle
bundle install
或Dockerfile
行