diff --git a/Dockerfile b/Dockerfile index af8c454fa..678383b14 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,70 +1,57 @@ # Make sure it matches the Ruby version in .ruby-version and Gemfile -ARG RUBY_VERSION=2.7.8 -FROM ruby:${RUBY_VERSION}-alpine +ARG RUBY_VERSION=3.2 +FROM ruby:${RUBY_VERSION}-slim-bookworm -RUN apk add --no-cache build-base \ - libxml2-dev \ - libxslt-dev \ - mariadb-dev \ - git \ - tzdata \ - nodejs yarn \ - less \ - bash \ - docker \ - docker-compose \ - cmake \ - g++ \ - make \ - libc6-compat \ - libstdc++ \ - ruby-dev \ - libffi-dev \ - openssl-dev \ - && mkdir /node_modules - - -# Rails app lives here WORKDIR /app -# Set production environment +RUN bash -c "set -o pipefail && apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + libxml2 \ + libxslt-dev \ + libmariadb-dev \ + git \ + curl \ + libffi-dev \ + pkg-config \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key -o /etc/apt/keyrings/nodesource.asc \ + && echo 'deb [signed-by=/etc/apt/keyrings/nodesource.asc] https://deb.nodesource.com/node_20.x nodistro main' | tee /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y --no-install-recommends nodejs \ + && corepack enable \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /usr/share/doc /usr/share/man \ + && mkdir /node_modules" + ARG RAILS_ENV="production" +ARG NODE_ENV="production" ARG BUNDLE_WITHOUT="development test" + ENV RAILS_LOG_TO_STDOUT="1" \ RAILS_SERVE_STATIC_FILES="true" \ RAILS_ENV="${RAILS_ENV}" \ + NODE_ENV="${NODE_ENV}" \ BUNDLE_PATH=/usr/local/bundle \ BUNDLE_WITHOUT="${BUNDLE_WITHOUT}" -# Update RubyGems and Bundler -RUN gem update --system 3.4.22 && \ - gem install bundler:2.4.22 +#PATH="${PATH}:/node_modules/.bin" +COPY Gemfile* . +RUN bundle install -# Copy Gemfile and Gemfile.lock first -COPY Gemfile Gemfile.lock ./ +COPY package.json *yarn* . +RUN yarn install -# Install gems -RUN bundle config set --local build.nokogiri --use-system-libraries && \ - bundle install --jobs 4 --retry 3 - -# Copy the rest of the application COPY . . -# Install yarn packages and build -RUN yarn install && yarn build - -# Copy configuration files -RUN cp config/bioportal_config_env.rb.sample config/bioportal_config_production.rb && \ - cp config/bioportal_config_env.rb.sample config/bioportal_config_development.rb && \ - cp config/database.yml.sample config/database.yml - -# Precompile bootsnap code for faster boot times -RUN bundle exec bootsnap precompile --gemfile app/ lib/ +RUN cp config/bioportal_config_env.rb.sample config/bioportal_config_production.rb \ + && cp config/bioportal_config_env.rb.sample config/bioportal_config_development.rb \ + && cp config/bioportal_config_env.rb.sample config/bioportal_config_test.rb \ + && cp config/database.yml.sample config/database.yml -# Precompile assets -RUN SECRET_KEY_BASE_DUMMY="1" ./bin/rails assets:precompile +RUN if [ "${RAILS_ENV}" != "development" ]; then \ + bundle exec bootsnap precompile --gemfile app/ lib/ && \ + SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile; fi -ENV BINDING="0.0.0.0" EXPOSE 3000 -CMD ["bash"] +CMD ["rails", "s"] diff --git a/Gemfile b/Gemfile index 8cc430e0b..a5fcd5923 100644 --- a/Gemfile +++ b/Gemfile @@ -2,7 +2,7 @@ source 'https://rubygems.org' # Main Rails gem # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '7.0.4' +gem 'rails', '7.0.8' # JavaScript bundling for Rails gem 'jsbundling-rails' diff --git a/Gemfile.lock b/Gemfile.lock index 93ec70aaf..490571640 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -19,67 +19,67 @@ GIT GEM remote: https://rubygems.org/ specs: - actioncable (7.0.4) - actionpack (= 7.0.4) - activesupport (= 7.0.4) + actioncable (7.0.8) + actionpack (= 7.0.8) + activesupport (= 7.0.8) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.4) - actionpack (= 7.0.4) - activejob (= 7.0.4) - activerecord (= 7.0.4) - activestorage (= 7.0.4) - activesupport (= 7.0.4) + actionmailbox (7.0.8) + actionpack (= 7.0.8) + activejob (= 7.0.8) + activerecord (= 7.0.8) + activestorage (= 7.0.8) + activesupport (= 7.0.8) mail (>= 2.7.1) net-imap net-pop net-smtp - actionmailer (7.0.4) - actionpack (= 7.0.4) - actionview (= 7.0.4) - activejob (= 7.0.4) - activesupport (= 7.0.4) + actionmailer (7.0.8) + actionpack (= 7.0.8) + actionview (= 7.0.8) + activejob (= 7.0.8) + activesupport (= 7.0.8) mail (~> 2.5, >= 2.5.4) net-imap net-pop net-smtp rails-dom-testing (~> 2.0) - actionpack (7.0.4) - actionview (= 7.0.4) - activesupport (= 7.0.4) - rack (~> 2.0, >= 2.2.0) + actionpack (7.0.8) + actionview (= 7.0.8) + activesupport (= 7.0.8) + rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.4) - actionpack (= 7.0.4) - activerecord (= 7.0.4) - activestorage (= 7.0.4) - activesupport (= 7.0.4) + actiontext (7.0.8) + actionpack (= 7.0.8) + activerecord (= 7.0.8) + activestorage (= 7.0.8) + activesupport (= 7.0.8) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.4) - activesupport (= 7.0.4) + actionview (7.0.8) + activesupport (= 7.0.8) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.4) - activesupport (= 7.0.4) + activejob (7.0.8) + activesupport (= 7.0.8) globalid (>= 0.3.6) - activemodel (7.0.4) - activesupport (= 7.0.4) - activerecord (7.0.4) - activemodel (= 7.0.4) - activesupport (= 7.0.4) - activestorage (7.0.4) - actionpack (= 7.0.4) - activejob (= 7.0.4) - activerecord (= 7.0.4) - activesupport (= 7.0.4) + activemodel (7.0.8) + activesupport (= 7.0.8) + activerecord (7.0.8) + activemodel (= 7.0.8) + activesupport (= 7.0.8) + activestorage (7.0.8) + actionpack (= 7.0.8) + activejob (= 7.0.8) + activerecord (= 7.0.8) + activesupport (= 7.0.8) marcel (~> 1.0) mini_mime (>= 1.1.0) - activesupport (7.0.4) + activesupport (7.0.8) concurrent-ruby (~> 1.0, >= 1.0.2) i18n (>= 1.6, < 2) minitest (>= 5.1) @@ -385,20 +385,20 @@ GEM rack (~> 2.2, >= 2.2.4) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.4) - actioncable (= 7.0.4) - actionmailbox (= 7.0.4) - actionmailer (= 7.0.4) - actionpack (= 7.0.4) - actiontext (= 7.0.4) - actionview (= 7.0.4) - activejob (= 7.0.4) - activemodel (= 7.0.4) - activerecord (= 7.0.4) - activestorage (= 7.0.4) - activesupport (= 7.0.4) + rails (7.0.8) + actioncable (= 7.0.8) + actionmailbox (= 7.0.8) + actionmailer (= 7.0.8) + actionpack (= 7.0.8) + actiontext (= 7.0.8) + actionview (= 7.0.8) + activejob (= 7.0.8) + activemodel (= 7.0.8) + activerecord (= 7.0.8) + activestorage (= 7.0.8) + activesupport (= 7.0.8) bundler (>= 1.15.0) - railties (= 7.0.4) + railties (= 7.0.8) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -409,9 +409,9 @@ GEM rails-i18n (7.0.9) i18n (>= 0.7, < 2) railties (>= 6.0.0, < 8) - railties (7.0.4) - actionpack (= 7.0.4) - activesupport (= 7.0.4) + railties (7.0.8) + actionpack (= 7.0.8) + activesupport (= 7.0.8) method_source rake (>= 12.2) thor (~> 1.0) @@ -562,6 +562,7 @@ GEM zeitwerk (2.6.18) PLATFORMS + aarch64-linux aarch64-linux-musl x86_64-linux x86_64-linux-musl @@ -618,7 +619,7 @@ DEPENDENCIES ontologies_api_client! pry puma (~> 5.0) - rails (= 7.0.4) + rails (= 7.0.8) rails-i18n (~> 7.0.0) recaptcha (~> 5.9.0) rest-client diff --git a/package.json b/package.json index 392e650aa..56cafe45b 100644 --- a/package.json +++ b/package.json @@ -26,5 +26,6 @@ }, "scripts": { "build": "esbuild app/javascript/*.* --bundle --sourcemap --outdir=app/assets/builds" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" }