diff --git a/lib/modules/manager/bundler/artifacts.spec.ts b/lib/modules/manager/bundler/artifacts.spec.ts
index 114ad5d8995d2fb0d812a6ac0dae3edf2f54aa21..66cb6af9da558457761ed600b0cf4598d557d6a8 100644
--- a/lib/modules/manager/bundler/artifacts.spec.ts
+++ b/lib/modules/manager/bundler/artifacts.spec.ts
@@ -882,7 +882,7 @@ describe('modules/manager/bundler/artifacts', () => {
         ]);
       });
 
-      it('handles failure of strict updating', async () => {
+      it('handles failure of strict updating for version solving', async () => {
         const execError = new ExecError('Exec error', {
           cmd: '',
           stdout: '',
@@ -913,6 +913,39 @@ describe('modules/manager/bundler/artifacts', () => {
           { cmd: 'bundler lock --minor --conservative --update foo' },
         ]);
       });
+
+      it('handles failure of strict updating for missing gem', async () => {
+        // See https://github.com/rubygems/rubygems/issues/7369
+        const execError = new ExecError('Exec error', {
+          cmd: '',
+          stdout: '',
+          stderr: "Could not find gems matching 'foo ",
+          options: { encoding: 'utf8' },
+        });
+        fs.readLocalFile.mockResolvedValue('Current Gemfile.lock');
+        const execSnapshots = mockExecSequence([
+          execError,
+          { stdout: '', stderr: '' },
+        ]);
+        git.getRepoStatus.mockResolvedValueOnce(
+          partial<StatusResult>({
+            modified: ['Gemfile.lock'],
+          }),
+        );
+
+        const res = await updateArtifacts({
+          packageFileName: 'Gemfile',
+          updatedDeps: [{ depName: 'foo', updateType: 'minor' }],
+          newPackageFileContent: '{}',
+          config,
+        });
+
+        expect(res).toMatchObject([{ file: { path: 'Gemfile.lock' } }]);
+        expect(execSnapshots).toMatchObject([
+          { cmd: 'bundler lock --minor --strict --update foo' },
+          { cmd: 'bundler lock --minor --conservative --update foo' },
+        ]);
+      });
     });
   });
 });
diff --git a/lib/modules/manager/bundler/artifacts.ts b/lib/modules/manager/bundler/artifacts.ts
index e7c5f7dd43d3a2e3f6cce1160fde06e79973711e..5b4f527a0aee51147d0d3247938c3e0b7669d7e9 100644
--- a/lib/modules/manager/bundler/artifacts.ts
+++ b/lib/modules/manager/bundler/artifacts.ts
@@ -245,7 +245,11 @@ export async function updateArtifacts(
       memCache.set('bundlerArtifactsError', BUNDLER_INVALID_CREDENTIALS);
       throw new Error(BUNDLER_INVALID_CREDENTIALS);
     }
-    if (recursionLimit > 0 && output.includes('version solving has failed')) {
+    if (
+      recursionLimit > 0 &&
+      (output.includes('version solving has failed') ||
+        output.includes('Could not find gem'))
+    ) {
       logger.debug('Failed to lock strictly, retrying non-strict');
       const newConfig = {
         ...config,