8
現在、私はドッカーを使用してアプリケーションを設定しています。私は1つのコントローラで、最小のレールアプリを持っている。Dockerでnginxを使用してRailsのプリコンパイルされたアセットを処理する
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 && docker-compose up
を実行するたびに資産が更新されるようにします。どのようにこれを達成するためのアイデア?
ありがとうございます、クーベルネットなどの展開でどのように動作するか考えてみてください。 – jeroenvisser101