如何更新我的Docker主机上的Gemfile.lock?
在Docker容器中使用Rails时, 多个 post (包括docker.com上的一个post )使用以下模式:
- 在
Dockerfile
执行ADD Gemfile
并ADD Gemfile.lock
,然后RUN bundle install
。 - 用
docker-compose run web rails new
创build一个新的Rails应用程序docker-compose run web rails new
。
由于我们RUN bundle install
来构build镜像,所以在更新Gemfile
之后, Gemfile
docker-compose build web
似乎是合适的。
这可以工作,因为gemset会在图像内更新,但是:
Docker主机上的Gemfile.lock
将不会更新以反映对Gemfile
的更改。 这是一个问题,因为:
-
Gemfile.lock
应该在你的仓库中 ,并且: -
它应该与您当前的
Gemfile
一致 。
所以:
如何更新主机上的Gemfile.lock
,以便可以检入版本控制?
在run
中执行bundle
会更新主机上的Gemfile.lock
:
docker-compose run web bundle
但是:您还必须再次build
图像。
TL; DR – 在容器上进行更改,在容器上运行软件包,然后重新启动以进行良好测量。 在本地这些更改将反映在您的应用程序,并准备testing/推出混帐,您的生产服务器将使用它来重build。
长; 读:
-
docker exec -it name_of_app_1 bash
-
vim Gemfile
,把像gem 'sorcery', '0.9.0'
vim Gemfile
gem 'sorcery', '0.9.0'
这样的东西gem 'sorcery', '0.9.0'
我觉得这确保你得到你正在寻找的版本 -
bundle
在当前容器的Gemfile
和Gemfile.lock
得到这个版本
这已经是半正常的“Rails”types的东西在这里,只是你正在做的容器正在运行。 现在,您不必担心git,并将这些更改。 你的git回购,因为这些更改都发生在本地副本上。 所以,打开一个terminal标签,进入你的应用程序和less Gemfile
,你应该看到的变化。
- 现在你可以重新启动你的运行容器。 你的Dockerfile将被重build(在我的情况下,通过docker-在本地
docker-compose up
,testing应该通过。
将你的改变提交给git,并使用你的部署过程在分期中进行检查。
笔记:
检查像OP的链接所说的Dockerfile
。 我假设你在Dockerfile
有一些bundle
或bundle install
行
只是要清楚,要运行的命令是:
docker-compose run web bundle docker-compose up --build
其中web是您的Dockerized Rails应用程序的名称。