From c87c2f09600f313e0859a7e5c5f26ed48398c49b Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Thu, 23 Oct 2025 14:48:08 -0700 Subject: [PATCH] Complete beamer gem adoption - stop importing beamer during Dockerfile builds - add a "bin/beamer" gemstub - invoke `bin/beamer` explicitly - drop the beamer initializer --- Dockerfile | 7 ------- Dockerfile.dev | 8 -------- Procfile.beamer-testbed | 2 +- bin/beamer | 16 ++++++++++++++++ bin/beamer-testbed | 4 ++-- config/initializers/beamer.rb | 25 ------------------------- 6 files changed, 19 insertions(+), 43 deletions(-) create mode 100755 bin/beamer delete mode 100644 config/initializers/beamer.rb diff --git a/Dockerfile b/Dockerfile index b40ca3a79..f1b6cdc67 100644 --- a/Dockerfile +++ b/Dockerfile @@ -44,11 +44,6 @@ RUN bundle exec bootsnap precompile app/ lib/ # Precompiling assets for production without requiring secret RAILS_MASTER_KEY RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile - -# Fetch beamer library -FROM registry.37signals.com/basecamp/beamer:vfs AS beamer - - # Final stage for app image FROM base @@ -60,8 +55,6 @@ RUN apt-get update -qq && \ # Copy built artifacts: gems, application COPY --from=build /usr/local/bundle /usr/local/bundle COPY --from=build /rails /rails -COPY --from=beamer /home/beamer/bin/beamer.so /rails/bin/lib/beamer.so -COPY --from=beamer /usr/local/bin/beamer /rails/bin/beamer # Run and own only the runtime files as a non-root user for security RUN useradd rails --create-home --shell /bin/bash && \ diff --git a/Dockerfile.dev b/Dockerfile.dev index 46c6f9d33..75b284570 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -26,17 +26,9 @@ RUN --mount=type=secret,id=GITHUB_TOKEN --mount=type=cache,id=fizzy-devbundle-${ cp -a /devbundle/. "$BUNDLE_PATH"/ && \ bundle clean --force -# Fetch beamer library -FROM registry.37signals.com/basecamp/beamer:vfs AS beamer - # Final stage FROM base -# Copy beamer into /usr/local because /rails is mounted as a volume and will overwrite anything -# there. -COPY --from=beamer /home/beamer/bin/beamer.so /usr/local/lib/beamer/beamer.so -COPY --from=beamer /usr/local/bin/beamer /usr/local/bin/beamer - # Entrypoint prepares the database ENTRYPOINT ["/rails/bin/docker-entrypoint"] diff --git a/Procfile.beamer-testbed b/Procfile.beamer-testbed index e6cd59476..05fe908af 100644 --- a/Procfile.beamer-testbed +++ b/Procfile.beamer-testbed @@ -1,3 +1,3 @@ web: bin/thrust bin/rails server -beamer: beamer --debug --directory ./storage/ run --primary ${BEAMER_PRIMARY:-$(hostname)} +beamer: bin/beamer --debug --directory ./storage/ run --primary ${BEAMER_PRIMARY:-$(hostname)} migrations: bin/beamer-testbed run-migrations --debug --directory ./storage/ diff --git a/bin/beamer b/bin/beamer new file mode 100755 index 000000000..b0b4f14e4 --- /dev/null +++ b/bin/beamer @@ -0,0 +1,16 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# +# This file was generated by Bundler. +# +# The application 'beamer' is installed as part of a gem, and +# this file is here to facilitate running it. +# + +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) + +require "rubygems" +require "bundler/setup" + +load Gem.bin_path("beamer-rails", "beamer") diff --git a/bin/beamer-testbed b/bin/beamer-testbed index f4030dbb9..baf667501 100755 --- a/bin/beamer-testbed +++ b/bin/beamer-testbed @@ -178,7 +178,7 @@ cmd_run_migrations() { echo "Waiting for beamer to be ready..." # Wait for beamer status to succeed - while ! beamer $BEAMER_OPTIONS status >/dev/null 2>&1; do + while ! bin/beamer $BEAMER_OPTIONS status >/dev/null 2>&1; do echo "Beamer not ready yet, waiting..." sleep 1 done @@ -187,7 +187,7 @@ cmd_run_migrations() { sleep 1 # Check if this is the primary node - if beamer $BEAMER_OPTIONS is-primary; then + if bin/beamer $BEAMER_OPTIONS is-primary; then echo "This is the primary node, running migrations..." ./bin/rails db:prepare echo "Migrations complete!" diff --git a/config/initializers/beamer.rb b/config/initializers/beamer.rb deleted file mode 100644 index 7b5cc182e..000000000 --- a/config/initializers/beamer.rb +++ /dev/null @@ -1,25 +0,0 @@ -# This is a temporary shim to load the Beamer VFS prior to opening the tenanted -# databases that use it. -# -# It's here to get around the fact that the VFS needs to be registed before the -# databases are opened, so we can't rely on the normal extension loading to do -# it. -# -# We'll move this responsibility into a Beamer gem soon, at which point this -# file will be removed. - -Rails.application.config.after_initialize do - paths = [ - Rails.root.join("bin/lib/beamer.so"), - Pathname("/usr/local/lib/beamer/beamer.so") - ] - - paths.each do |beamer_extension_path| - if beamer_extension_path.exist? - db = SQLite3::Database.new ":memory:" - db.enable_load_extension(true) - db.load_extension(beamer_extension_path) - break - end - end -end