ruby-on-rails – 在Docker中使用nginx为Rails提供预编译资产
发布时间:2020-12-17 04:40:03 所属栏目:百科 来源:网络整理
导读:目前我正在使用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应用程序在运行之前删除旧容器和卷. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |