ruby-on-rails - 在 Docker 上修改 Rails 应用程序时,如何加载源代码更改?
问题描述
当使用 Docker 在开发机器上运行 Rails 应用程序时,如何强制使用代码更改?
我正在使用 Docker 测试/调整 Rails 应用程序(帮助),但是当我修改 Rails 源时,任何更改都会被忽略。甚至更改 docker/run.sh 或调整视图上的文本。
所以 docker 显然正在缓存所有内容,我如何告诉 docker 使用我编辑的当前源代码?
我试过
docker-compose down (then up)
或者
docker-compose restart
或者
docker-compose build
Dockerfile 是
FROM ruby:2.4
ENV HELPY_VERSION=master \
RAILS_ENV=production \
HELPY_HOME=/helpy \
HELPY_USER=helpyuser \
HELPY_SLACK_INTEGRATION_ENABLED=true
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y nodejs postgresql-client imagemagick --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --no-create-home $HELPY_USER \
&& mkdir -p $HELPY_HOME \
&& chown -R $HELPY_USER:$HELPY_USER $HELPY_HOME /usr/local/lib/ruby /usr/local/bundle
WORKDIR $HELPY_HOME
USER $HELPY_USER
RUN git clone --branch $HELPY_VERSION --depth=1 https://github.com/helpyio/helpy.git .
# add the slack integration gem to the Gemfile if the HELPY_SLACK_INTEGRATION_ENABLED is true
# use `test` for sh compatibility, also use only one `=`. also for sh compatibility
RUN test "$HELPY_SLACK_INTEGRATION_ENABLED" = "true" && sed -i '128i\gem "helpy_slack", git: "https://github.com/helpyio/helpy_slack.git", branch: "master"' $HELPY_HOME/Gemfile
RUN bundle install
RUN touch /helpy/log/production.log && chmod 0664 /helpy/log/production.log
# Due to a weird issue with one of the gems, execute this permissions change:
RUN chmod +r /usr/local/bundle/gems/griddler-mandrill-1.1.3/lib/griddler/mandrill/adapter.rb
# manually create the /helpy/public/assets folder and give the helpy user rights to it
# this ensures that helpy can write precompiled assets to it
RUN mkdir -p $HELPY_HOME/public/assets && chown $HELPY_USER $HELPY_HOME/public/assets
VOLUME $HELPY_HOME/public
COPY docker/database.yml $HELPY_HOME/config/database.yml
COPY docker/run.sh $HELPY_HOME/run.sh
CMD ["./run.sh"]
docker-compose.yml 是
version: '2'
services:
frontend:
image: webwurst/caddy
volumes:
- ./docker/Caddyfile:/etc/caddy/Caddyfile
- ./certs:/etc/caddy/certs
volumes_from:
- helpy:ro
ports:
- "80:80"
- "443:443"
networks:
- front
restart: always
depends_on:
- helpy
helpy:
image: helpy/helpy
restart: always
networks:
- front
- back
volumes:
- rails-assets:/helpy/public
env_file: docker/.env
#environment:
# - DO_NOT_PREPARE=true
depends_on:
- postgres
postgres:
image: postgres:9.4
restart: always
networks:
- back
env_file: docker/.env
volumes:
- ./postgres:/var/lib/postgresql/data
volumes:
rails-assets:
driver: local
networks:
front:
driver: bridge
back:
driver: bridge
在 docker-compose.yml 我改变了
helpy:
image: helpy/helpy
到
helpy:
build: .
期望停止使用预先构建的 docker 映像,并使用开发机器上的代码。但是我对视图所做的任何更改(例如,只是将视图上的一些标题文本从“管理品牌”更改为“我的新标题”)都会被忽略。我试过
docker-compose down
docker-compose up
同样,我尝试了 docker-compose build 或 docker-compose restart
所以 Docker 显然是在缓存源代码,而不是使用我编辑的源代码的“实时”版本。
我已经使用了很多 Vagrant,但对 Docker 还是很陌生,因此对于修改 Docker 项目以允许本地开发更改的任何帮助将不胜感激。
解决方案
如果您使用:
volumes:
rails-assets:
driver: local
您告诉 docker 创建一个卷并将您的数据放入其中。
但是如果你想与容器实时同步共享你的本地代码,你需要这样做:
helpy:
image: helpy/helpy
restart: always
networks:
- front
- back
volumes:
- ./local/path/to/your/code:/helpy/public
现在,当您更改本地代码时,代码将同时在容器内更改。
推荐阅读
- javascript - 如何保存用户在我的网站游戏上的进度?
- java - 如何在构造函数java中调用初始化char数组的私有方法
- python - 不应在多个会话上烧瓶对象
- jquery - PDF 预览后无法关闭模式
- angularjs - 用茉莉花角度测试“这个”
- css - 页眉和页脚之间的模态主体可动态滚动到末尾
- asp.net-core - Restsharp:无法建立 SSL 连接
- python - 退出python时pyspark得到Py4JNetworkError(“Java端的答案为空”)
- java - Spring @Transactional 不适用于 CompletableFuture
- javascript - 如何将 module.exports 更改为导入和导出?