Ask A Question

Notifications

You’re not receiving notifications from this thread.

Docker rails assets:precompile

Islam Bahnas asked in Rails

Hello I'm learning docker and faced this error while testing it locally

banstein@DESKTOP-I54N512:~/Projects/icb$ docker-compose build
[+] Building 4.2s (12/12) FINISHED                                                    
 => [internal] load build definition from Dockerfile                             0.0s
 => => transferring dockerfile: 32B                                              0.0s
 => [internal] load .dockerignore                                                0.0s
 => => transferring context: 35B                                                 0.0s
 => [internal] load metadata for docker.io/library/ruby:3.2.0                    1.0s
 => [internal] load build context                                                0.0s
 => => transferring context: 7.59kB                                              0.0s
 => [1/8] FROM docker.io/library/ruby:3.2.0@sha256:f2ec40227806aaab47e928f2e0ea  0.0s
 => CACHED [2/8] RUN apt-get update -qq &&     apt-get install -y build-essenti  0.0s
 => CACHED [3/8] WORKDIR /rails                                                  0.0s
 => CACHED [4/8] COPY Gemfile Gemfile.lock ./                                    0.0s
 => CACHED [5/8] RUN bundle install                                              0.0s
 => CACHED [6/8] COPY . .                                                        0.0s
 => CACHED [7/8] RUN bundle exec bootsnap precompile --gemfile app/ lib/         0.0s
 => ERROR [8/8] RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile  3.1s
------
 > [8/8] RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile:
#0 3.016 Parsing scenario file install
#0 3.017 ERROR: [Errno 2] No such file or directory: 'install'
#0 3.027 rails aborted!
#0 3.027 jsbundling-rails: Command build failed, ensure yarn is installed and `yarn build` runs without errors
#0 3.027 
#0 3.027 Tasks: TOP => assets:precompile => javascript:build
#0 3.027 (See full trace by running task with --trace)
------
failed to solve: executor failed running [/bin/sh -c SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile]: exit code: 1

Reply

Hey Islam,

Looks like rails can't find the install directory. After [6/8] COPY . ., insert a bash shell and poke around to verify that the directories you copied actually exist. Also, can you post the Dockerfile and docker-compose file?

Reply

here is the Dockerfile
i setup the project with rails g new --main --database=postgresql --css=bootstrap

# Make sure it matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.2.0
FROM ruby:$RUBY_VERSION

# Install libvips for Active Storage preview support
RUN apt-get update -qq && \
    apt-get install -y build-essential libvips bash bash-completion libffi-dev tzdata postgresql nodejs npm yarn && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man

# Rails app lives here
WORKDIR /rails

# Set production environment
ENV RAILS_LOG_TO_STDOUT="1" \
    RAILS_SERVE_STATIC_FILES="true" \
    RAILS_ENV="production" \
    BUNDLE_WITHOUT="development"

# Install application gems
COPY Gemfile Gemfile.lock ./
RUN bundle install

# Copy application code
COPY . .

# Precompile bootsnap code for faster boot times
RUN bundle exec bootsnap precompile --gemfile app/ lib/

# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile
# Entrypoint prepares the database.
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
# ENTRYPOINT ["rails/bin/docker-entrypoint"]

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD ["./bin/rails", "server"]

docker-compose file:

version: '3.4'
services:
  yarn:
    image: node:14.5
    command: yarn install
  db:
    image: postgres:14.2-alpine
    container_name: demo-postgres-14.2
    volumes:
      - postgres_data:/var/lib/postgresql/data
    command: 
      "postgres -c 'max_connections=500'"
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    ports:
      - "5432:5432"
  demo-web:
    build: .
    command: "./bin/rails server"
    environment:
      - RAILS_ENV=${RAILS_ENV}
      - POSTGRES_HOST=${POSTGRES_HOST}
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - RAILS_MASTER_KEY=${RAILS_MASTER_KEY}
    volumes:
      - app-storage:/rails/storage
    depends_on:
      - db
    ports:
      - "3000:3000"

volumes:
  postgres_data: {}
  app-storage: {}
Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 86,946+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.