Hiện tại tôi đang thiết lập ứng dụng của mình bằng trình cắm. Tôi đã có một ứng dụng đường ray tối thiểu, với 1 bộ điều khiển. Bạn có thể nhận cài đặt của tôi bằng cách chạy này:Cung cấp các tài sản biên dịch sẵn của Rails bằng nginx trong Docker
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
Và tôi có các thiết lập sau:
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"
đâu VOLUME "$APP_DIR/public"
đang tạo ra một khối lượng đó là chia sẻ với container Nginx, mà có số này trong số Dockerfile
:
FROM nginx
ADD nginx.conf /etc/nginx/nginx.conf
Và sau đó 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
Tác phẩm này, nhưng chỉ lần đầu tiên tôi tạo. Nếu tôi thay đổi bất kỳ nội dung nào và tạo lại hình ảnh, chúng sẽ không được cập nhật. Có thể bởi vì khối lượng không được cập nhật về xây dựng hình ảnh, tôi nghĩ bởi vì Docker xử lý bộ nhớ đệm như thế nào.
Tôi muốn nội dung được cập nhật mỗi khi tôi chạy docker-compose built && docker-compose up
. Bất kỳ ý tưởng làm thế nào để thực hiện điều này?
Cảm ơn, bất kỳ ý tưởng nào về cách thức này sẽ hoạt động trên việc triển khai với, Kubernetes? – jeroenvisser101