diff options
author | Claire <claire.github-309c@sitedethib.com> | 2021-02-09 18:12:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-09 18:12:54 +0100 |
commit | acdeb162b8c2e7d036c34690de85dea70277713d (patch) | |
tree | de2ae568cf5c57f7db5c5b9620bcbccf504f2bd5 /app | |
parent | acf1842896682674d9ab4d0f87ec04c6174468fa (diff) |
Create instance actor if it hasn't been properly seeded (#15693)
An uncommon but somewhat difficult to digagnose issue is dealing with
improperly-seeded databases. In such cases, instance-signed fetches will
fail with a ActiveRecord::RecordNotFound error, usually caught and handled
as generic 404, leading people to think the remote resource itself has not
been found, while it's the local instance actor that does not exist.
This commit changes the code so that failure to find the instance actor
automatically creates a new one, so that improperly-seeded databases do
not cause any issue.
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/instance_actors_controller.rb | 2 | ||||
-rw-r--r-- | app/models/concerns/account_finder_concern.rb | 2 |
2 files changed, 3 insertions, 1 deletions
diff --git a/app/controllers/instance_actors_controller.rb b/app/controllers/instance_actors_controller.rb index 4b074ca1926..b3b5476e2f5 100644 --- a/app/controllers/instance_actors_controller.rb +++ b/app/controllers/instance_actors_controller.rb @@ -13,7 +13,7 @@ class InstanceActorsController < ApplicationController private def set_account - @account = Account.find(-99) + @account = Account.representative end def restrict_fields_to diff --git a/app/models/concerns/account_finder_concern.rb b/app/models/concerns/account_finder_concern.rb index 04b2c981b17..0dadddad12a 100644 --- a/app/models/concerns/account_finder_concern.rb +++ b/app/models/concerns/account_finder_concern.rb @@ -14,6 +14,8 @@ module AccountFinderConcern def representative Account.find(-99) + rescue ActiveRecord::RecordNotFound + Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain) end def find_local(username) |