X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/de3dea3c1246be411a1a9789c70a91997b3cc8ea..f5056b8816239a98d398b6eba7caf9b683f463ca:/build/rails-package-scripts/postinst.sh?ds=sidebyside diff --git a/build/rails-package-scripts/postinst.sh b/build/rails-package-scripts/postinst.sh index a06f8a8e90..d3755a61d8 100644 --- a/build/rails-package-scripts/postinst.sh +++ b/build/rails-package-scripts/postinst.sh @@ -10,12 +10,6 @@ set -e DATABASE_READY=1 APPLICATION_READY=1 -if [ -s "$HOME/.rvm/scripts/rvm" ] || [ -s "/usr/local/rvm/scripts/rvm" ]; then - COMMAND_PREFIX="/usr/local/rvm/bin/rvm-exec default" -else - COMMAND_PREFIX= -fi - report_not_ready() { local ready_flag="$1"; shift local config_file="$1"; shift @@ -125,17 +119,17 @@ setup_conffile() { } prepare_database() { - DB_MIGRATE_STATUS=`$COMMAND_PREFIX bundle exec rake db:migrate:status 2>&1 || true` + DB_MIGRATE_STATUS=`bin/rake db:migrate:status 2>&1 || true` if echo "$DB_MIGRATE_STATUS" | grep -qF 'Schema migrations table does not exist yet.'; then # The database exists, but the migrations table doesn't. - run_and_report "Setting up database" $COMMAND_PREFIX bundle exec \ - rake "$RAILSPKG_DATABASE_LOAD_TASK" db:seed + run_and_report "Setting up database" bin/rake \ + "$RAILSPKG_DATABASE_LOAD_TASK" db:seed elif echo "$DB_MIGRATE_STATUS" | grep -q '^database: '; then run_and_report "Running db:migrate" \ - $COMMAND_PREFIX bundle exec rake db:migrate + bin/rake db:migrate elif echo "$DB_MIGRATE_STATUS" | grep -q 'database .* does not exist'; then if ! run_and_report "Running db:setup" \ - $COMMAND_PREFIX bundle exec rake db:setup 2>/dev/null; then + bin/rake db:setup 2>/dev/null; then echo "Warning: unable to set up database." >&2 DATABASE_READY=0 fi @@ -198,12 +192,20 @@ configure_version() { cd "$RELEASE_PATH" export RAILS_ENV=production - if ! $COMMAND_PREFIX bundle --version >/dev/null; then - run_and_report "Installing bundle" $COMMAND_PREFIX gem install bundle - fi + run_and_report "Installing bundler" gem install --conservative --version '~> 2.4.0' bundler + + run_and_report "Running bundle config set --local path $SHARED_PATH/vendor_bundle" \ + bundle config set --local path "$SHARED_PATH/vendor_bundle" - run_and_report "Running bundle install" \ - $COMMAND_PREFIX bundle install --path $SHARED_PATH/vendor_bundle --local --quiet + # As of April 2024/Bundler 2.4, `bundle install` tends not to install gems + # which are already installed system-wide, which causes bundle activation to + # fail later. Work around this by installing all gems manually. + local gem_dir="$SHARED_PATH/vendor_bundle/ruby/$(ruby -e 'puts RUBY_VERSION')" + find vendor/cache -maxdepth 1 -name '*.gem' -print0 \ + | run_and_report "Installing bundle gems" \ + xargs -0r gem install --quiet --install-dir="$gem_dir" + run_and_report "Running bundle install" bundle install --prefer-local --quiet + run_and_report "Verifying bundle is complete" bundle exec true echo -n "Ensuring directory and file permissions ..." # Ensure correct ownership of a few files @@ -212,9 +214,14 @@ configure_version() { chown "$WWW_OWNER:" $RELEASE_PATH/Gemfile.lock chown -R "$WWW_OWNER:" $RELEASE_PATH/tmp || true chown -R "$WWW_OWNER:" $SHARED_PATH/log + # Make sure postgres doesn't try to use a pager. + export PAGER= case "$RAILSPKG_DATABASE_LOAD_TASK" in - db:schema:load) chown "$WWW_OWNER:" $RELEASE_PATH/db/schema.rb ;; - db:structure:load) chown "$WWW_OWNER:" $RELEASE_PATH/db/structure.sql ;; + # db:structure:load was deprecated in Rails 6.1 and shouldn't be used. + db:schema:load | db:structure:load) + chown "$WWW_OWNER:" $RELEASE_PATH/db/schema.rb || true + chown "$WWW_OWNER:" $RELEASE_PATH/db/structure.sql || true + ;; esac chmod 644 $SHARED_PATH/log/* chmod -R 2775 $RELEASE_PATH/tmp || true @@ -224,19 +231,15 @@ configure_version() { prepare_database fi - if [ 11 = "$RAILSPKG_SUPPORTS_CONFIG_CHECK$APPLICATION_READY" ]; then + if [ -e /etc/arvados/config.yml ]; then + # warn about config errors (deprecated/removed keys from + # previous version, etc) run_and_report "Checking configuration for completeness" \ - $COMMAND_PREFIX bundle exec rake config:check || APPLICATION_READY=0 - fi - - # precompile assets; thankfully this does not take long - if [ "$APPLICATION_READY" = "1" ]; then - run_and_report "Precompiling assets" \ - $COMMAND_PREFIX bundle exec rake assets:precompile -q -s 2>/dev/null \ - || APPLICATION_READY=0 + bin/rake config:check || APPLICATION_READY=0 else - echo "Precompiling assets... skipped." + APPLICATION_READY=0 fi + chown -R "$WWW_OWNER:" $RELEASE_PATH/tmp setup_before_nginx_restart @@ -254,9 +257,4 @@ elif [ "$1" = "0" ] || [ "$1" = "1" ] || [ "$1" = "2" ]; then configure_version fi -if printf '%s\n' "$CONFIG_PATH" | grep -Fqe "sso"; then - report_not_ready "$APPLICATION_READY" "$CONFIG_PATH/application.yml" - report_not_ready "$DATABASE_READY" "$CONFIG_PATH/database.yml" -else - report_not_ready "$APPLICATION_READY" "/etc/arvados/config.yml" -fi +report_not_ready "$APPLICATION_READY" "/etc/arvados/config.yml"