diff --git a/.ruby-version b/.ruby-version
index 9c25013d..86fb6504 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-3.3.6
+3.3.7
diff --git a/Gemfile b/Gemfile
index c7450146..fa313e6f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,5 +1,5 @@
 source 'https://rubygems.org'
-ruby '3.3.6'
+ruby '3.3.7'
 
 gem 'rails', '~> 8.0', '>= 8.0.1'
 
diff --git a/Gemfile.lock b/Gemfile.lock
index 2ebd3754..5bb3d449 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -571,7 +571,7 @@ DEPENDENCIES
   will_paginate (~> 4.0)
 
 RUBY VERSION
-   ruby 3.3.6p108
+   ruby 3.3.7p123
 
 BUNDLED WITH
    2.5.18
diff --git a/deploy/deploy.yml b/deploy/deploy.yml
index 5f28210c..b3dbd6aa 100644
--- a/deploy/deploy.yml
+++ b/deploy/deploy.yml
@@ -6,7 +6,7 @@
   vars:
     local_app_root: "{{ playbook_dir  }}/.."
     remote_project_root: "/srv/impress"
-    ruby_version: "3.3.6"
+    ruby_version: "3.3.7"
 
     # deploy:setup should have added us to the "impress-deployers" group, so we
     # should be able to become the "impress" user without a password.
diff --git a/deploy/files/impress.service.j2 b/deploy/files/impress.service.j2
index a4917ff8..fa47e05c 100644
--- a/deploy/files/impress.service.j2
+++ b/deploy/files/impress.service.j2
@@ -5,7 +5,7 @@ Description=Dress to Impress webapp
 User=impress
 Restart=always
 WorkingDirectory=/srv/impress/current
-ExecStart=/opt/ruby-{{ ruby_version }}/bin/bundle exec falcon host
+ExecStart=/opt/ruby-{{ ruby_version_live }}/bin/bundle exec falcon host
 Environment="RAILS_ENV=production"
 ; Set EXECJS_RUNTIME to save us from needing to install Node
 Environment="EXECJS_RUNTIME=Disabled"
diff --git a/deploy/setup.yml b/deploy/setup.yml
index 2874d2f8..c80afb7b 100644
--- a/deploy/setup.yml
+++ b/deploy/setup.yml
@@ -6,7 +6,10 @@
   vars:
     email_address: "emi@matchu.dev" # TODO: Extract this to personal config?
     impress_hostname: impress.openneo.net
-    ruby_version: "3.3.6"
+
+    # These two values should usually be the same, unless you're in the middle of an upgrade!
+    ruby_version_latest: "3.3.7" # The latest Ruby to install.
+    ruby_version_live: "3.3.7" # The Ruby to run the latest version of the app with.
   vars_files:
     # mysql_root_password, mysql_user_password, mysql_user_password_2020,
     # dev_ips
@@ -171,21 +174,21 @@
       git:
         repo: https://github.com/rbenv/ruby-build.git
         dest: /opt/ruby-build
-        version: v20241225.2
+        version: v20250326
 
-    - name: Check if Ruby {{ ruby_version }} is already installed
+    - name: Check if Ruby {{ ruby_version_latest }} is already installed
       stat:
-        path: /opt/ruby-{{ ruby_version }}
+        path: /opt/ruby-{{ ruby_version_latest }}
       register: ruby_dir
 
-    - name: Install Ruby {{ ruby_version }}
-      command: "/opt/ruby-build/bin/ruby-build {{ ruby_version }} /opt/ruby-{{ ruby_version }}"
+    - name: Install Ruby {{ ruby_version_latest }}
+      command: "/opt/ruby-build/bin/ruby-build {{ ruby_version_latest }} /opt/ruby-{{ ruby_version_latest }}"
       when: not ruby_dir.stat.exists
 
-    - name: Add Ruby {{ ruby_version }} to the global PATH, for developer convenience
+    - name: Add Ruby {{ ruby_version_latest }} to the global PATH, for developer convenience
       copy:
         dest: /etc/profile.d/ruby_path.sh
-        content: PATH="/opt/ruby-{{ ruby_version }}/bin:$PATH"
+        content: PATH="/opt/ruby-{{ ruby_version_latest }}/bin:$PATH"
 
     - name: Install system dependencies for impress's Ruby gems
       apt:
@@ -249,14 +252,14 @@
       become_user: impress
       command:
         chdir: /srv/impress/versions/initial-placeholder
-        cmd: /opt/ruby-{{ ruby_version }}/bin/bundle config set --local deployment true
+        cmd: /opt/ruby-{{ ruby_version_live }}/bin/bundle config set --local deployment true
       when: not current_app_version.stat.exists
 
     - name: Install the placeholder app's dependencies
       become_user: impress
       command:
         chdir: /srv/impress/versions/initial-placeholder
-        cmd: /opt/ruby-{{ ruby_version }}/bin/bundle install
+        cmd: /opt/ruby-{{ ruby_version_live }}/bin/bundle install
       when: not current_app_version.stat.exists
 
     - name: Set the placeholder app as the current version
diff --git a/vendor/cache/ffi-1.17.1-aarch64-linux-gnu.gem b/vendor/cache/ffi-1.17.1-aarch64-linux-gnu.gem
new file mode 100644
index 00000000..4fa4a491
Binary files /dev/null and b/vendor/cache/ffi-1.17.1-aarch64-linux-gnu.gem differ
diff --git a/vendor/cache/nokogiri-1.18.1-aarch64-linux-gnu.gem b/vendor/cache/nokogiri-1.18.1-aarch64-linux-gnu.gem
new file mode 100644
index 00000000..a09da6a5
Binary files /dev/null and b/vendor/cache/nokogiri-1.18.1-aarch64-linux-gnu.gem differ