FROM ruby:3.4.1-slim ENV APP_PATH=/var/app ENV BUNDLE_VERSION=2.5.21 ENV BUNDLE_PATH=/usr/local/bundle/gems ENV RAILS_LOG_TO_STDOUT=true ENV RAILS_PORT=3000 ENV RAILS_ENV=development ENV SELF_HOSTED=true ENV SIDEKIQ_USERNAME=sidekiq ENV SIDEKIQ_PASSWORD=password # Resolving sqlite3 error ENV PGSSENCMODE=disable RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ wget \ build-essential \ git \ postgresql-client \ libpq-dev \ libxml2-dev \ libxslt-dev \ libyaml-dev \ libgeos-dev libgeos++-dev \ imagemagick \ tzdata \ nodejs \ yarn \ less \ libjemalloc2 libjemalloc-dev \ && mkdir -p $APP_PATH \ && rm -rf /var/lib/apt/lists/* # Use jemalloc with check for architecture RUN if [ "$(uname -m)" = "x86_64" ]; then \ echo "/usr/lib/x86_64-linux-gnu/libjemalloc.so.2" > /etc/ld.so.preload; \ else \ echo "/usr/lib/aarch64-linux-gnu/libjemalloc.so.2" > /etc/ld.so.preload; \ fi # Optional: Set YJIT explicitly (enabled by default in 3.4.1 MRI builds) ENV RUBY_YJIT_ENABLE=1 # Update RubyGems and install Bundler RUN gem update --system 3.6.2 \ && gem install bundler --version "$BUNDLE_VERSION" \ && rm -rf $GEM_HOME/cache/* WORKDIR $APP_PATH COPY ../Gemfile ../Gemfile.lock ../.ruby-version ../vendor ./ RUN bundle config set --local path 'vendor/bundle' \ && bundle install --jobs 4 --retry 3 \ && rm -rf vendor/bundle/ruby/3.4.1/cache/*.gem COPY ../. ./ # Create caching-dev.txt file to enable Rails caching in development RUN mkdir -p $APP_PATH/tmp && touch $APP_PATH/tmp/caching-dev.txt COPY ./docker/web-entrypoint.sh /usr/local/bin/web-entrypoint.sh RUN chmod +x /usr/local/bin/web-entrypoint.sh COPY ./docker/sidekiq-entrypoint.sh /usr/local/bin/sidekiq-entrypoint.sh RUN chmod +x /usr/local/bin/sidekiq-entrypoint.sh EXPOSE $RAILS_PORT ENTRYPOINT ["bundle", "exec"]