首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Docker上修改Rails应用程序时,如何加载源代码更改?

在Docker上修改Rails应用程序时,如何加载源代码更改?
EN

Stack Overflow用户
提问于 2018-07-31 06:00:21
回答 1查看 1K关注 0票数 1

当使用Docker在开发机器上运行Rails应用程序时,一次如何强制使用代码更改?

我正在使用Docker测试/调整Rails应用程序(Helpy),但当我修改Rails源代码时,任何更改都会被忽略。甚至更改dockker/run.sh或调整视图上的文本。

那么docker显然是在缓存所有东西,我该如何告诉docker使用我编辑的当前源代码呢?

我试过了

代码语言:javascript
复制
docker-compose down (then up)

代码语言:javascript
复制
docker-compose restart

代码语言:javascript
复制
docker-compose build

Dockerfile是

代码语言:javascript
复制
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是

代码语言:javascript
复制
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中,我更改了

代码语言:javascript
复制
  helpy:
    image: helpy/helpy

代码语言:javascript
复制
  helpy:
    build: .

期望停止使用预先构建的docker镜像,并使用开发机器上的代码。但我对视图所做的任何更改(例如,只是将视图上的一些标题文本从"Admin Brand“更改为"My New Header")都会被忽略。我试过了

代码语言:javascript
复制
docker-compose down
docker-compose up

类似地,我尝试了docker-compose构建或docker-compose重新启动

所以Docker显然是在缓存源代码,而不是使用我编辑的“实时”版本的源代码。

我经常使用Vagrant,但我对Docker非常陌生,因此,如果您能帮助我修改Docker项目以允许本地开发更改,我将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-31 09:50:36

如果您使用:

代码语言:javascript
复制
volumes:
  rails-assets:
    driver: local

你告诉docker创建一个卷,然后把你的数据放进去。

但是,如果您想要与容器实时同步地共享本地代码,则需要这样做:

代码语言:javascript
复制
helpy:
    image: helpy/helpy
    restart: always
    networks:
      - front
      - back
    volumes:
      - ./local/path/to/your/code:/helpy/public

现在,当您更改本地代码时,同时代码也会在容器中更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51602861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档