加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

ruby-on-rails – 在Docker中使用nginx为Rails提供预编译资产

发布时间:2020-12-16 03:37:47 所属栏目:安全 来源:网络整理
导读:目前我正在使用docker设置我的应用.我有一个最小的rails应用程序,有1个控制器.你可以运行以下命令来获取我的设置: rails new app --database=sqlite --skip-bundlecd apprails generate controller --skip-routes Home indexecho "Rails.application.routes

目前我正在使用docker设置我的应用.我有一个最小的rails应用程序,有1个控制器.你可以运行以下命令来获取我的设置:

rails new app --database=sqlite --skip-bundle
cd app
rails generate controller --skip-routes Home index
echo "Rails.application.routes.draw { root 'home#index' }" > config/routes.rb
echo "gem 'foreman'" >> Gemfile
echo "web: rails server -b 0.0.0.0" > Procfile
echo "port: 3000" > .foreman

我有以下设置:

Dockerfile:

FROM ruby:2.3

# Install dependencies
RUN apt-get update && apt-get install -y 
      nodejs 
      sqlite3 
      --no-install-recommends 
      && rm -rf /var/lib/apt/lists/*

# Configure bundle
RUN bundle config --global frozen 1
RUN bundle config --global jobs 7

# Expose ports and set entrypoint and command
EXPOSE 3000
CMD ["foreman","start"]

# Install Gemfile in different folder to allow caching
WORKDIR /tmp
COPY ["Gemfile","Gemfile.lock","/tmp/"]
RUN bundle install --deployment

# Set environment
ENV RAILS_ENV production
ENV RACK_ENV production

# Add files
ENV APP_DIR /app
RUN mkdir -p $APP_DIR
COPY . $APP_DIR
WORKDIR $APP_DIR

# Compile assets
RUN rails assets:precompile
VOLUME "$APP_DIR/public"

VOLUME“$APP_DIR / public”正在创建一个与Nginx容器共享的卷,它在Dockerfile中有这个:

FROM nginx

ADD nginx.conf /etc/nginx/nginx.conf

然后是docker-compose.yml:

version: '2'

services:
  web:
    build: config/docker/web
    volumes_from:
      - app
    links:
      - app:app
    ports:
      - 80:80
      - 443:443
  app:
    build: .
    environment:
      SECRET_KEY_BASE: 'af3...ef0'
    ports:
      - 3000:3000

这有效,但只是我第一次构建它.如果我更改任何资产,并再次构建图像??,它们就不会更新.可能因为图像构建时没有更新卷,我想是因为Docker如何处理缓存.

我希望每次运行docker-compose built&& amp;时都会更新资产.码头工人组成.知道怎么做到这一点?

最佳答案
Compose preserves volumes on recreate.

你有几个选择:

>不要为资产使用卷,而是在构建期间构建资产并将其添加或复制到Web容器中
> docker-compose rm应用程序在运行之前删除旧容器和卷.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读