Co nie działało
Pelican to darmowy, otwarty panel do zarządzania serwerami gier, zbudowany na Laravelu i Dockerze. Lista pluginów jest w nim modelem opartym na bibliotece Sushi, która trzyma wiersze w pamięci zamiast w zwykłej tabeli.
Od jednej z wcześniejszych zmian metoda updatePlugin() po pobraniu nowej wersji wywoływała najpierw Plugin::refreshRows(), a potem $plugin->refresh(). Problem w tym, że refreshRows() zeruje połączenie Sushi, więc refresh() na starej instancji modelu kończył się błędem Call to a member function query() on null (zgłoszenie #2588). Aktualizacja pluginu z poziomu panelu po prostu się wywracała.
Co zmieniliśmy
Zamiast odświeżać starą instancję, kod pobiera rekord od nowa przez Plugin::findOrFail(), dokładnie tak, jak robią to już zadania pluginów w tym samym projekcie:
updatePlugin() zwraca teraz zaktualizowany plugin, a kontroler API odsyła klientowi ten świeży obiekt zamiast nieaktualnej kopii sprzed aktualizacji.
Jak to sprawdziliśmy
Doszedł test integracyjny udanej aktualizacji: udawane pobranie paczki z nową wersją, aktualizacja i sprawdzenie stanu pluginu po niej. Na gałęzi main sprzed poprawki ten test kończy się dokładnie tym samym błędem, który opisywało zgłoszenie. Przy okazji test czyści wiersze Sushi po sobie, żeby usunięte pluginy nie przeciekały do kolejnych testów.
Efekt
Zmianę scalono 25 września 2026. Aktualizacja pluginów w Pelicanie działa z panelu i przez API.