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.
This commit is contained in:
parent
07042a0913
commit
24dee67d32
2 changed files with 3 additions and 1 deletions
|
@ -13,7 +13,7 @@ class InstanceActorsController < ApplicationController
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_account
|
def set_account
|
||||||
@account = Account.find(-99)
|
@account = Account.representative
|
||||||
end
|
end
|
||||||
|
|
||||||
def restrict_fields_to
|
def restrict_fields_to
|
||||||
|
|
|
@ -14,6 +14,8 @@ module AccountFinderConcern
|
||||||
|
|
||||||
def representative
|
def representative
|
||||||
Account.find(-99)
|
Account.find(-99)
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
Account.create!(id: -99, actor_type: 'Application', locked: true, username: Rails.configuration.x.local_domain)
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_local(username)
|
def find_local(username)
|
||||||
|
|
Loading…
Reference in a new issue