Error when updating

Getting “Server Error” when attempting to update from v5.5.19. Laravel log below.

[2022-09-09 17:10:28] production.ERROR: file_get_contents(/usr/share/nginx/invoiceninja/vendor/beganovich/snappdf/versions/revision.txt): Failed to open stream: No such file or directory {“userId”:1,“exception”:"[object] (ErrorException(code: 0): file_get_contents(/usr/share/nginx/invoiceninja/vendor/beganovich/snappdf/versions/revision.txt): Failed to open stream: No such file or directory at /usr/share/nginx/invoiceninja/app/Http/Controllers/SelfUpdateController.php:178)
[stacktrace]
#0 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(257): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap\{closure}()
#2 /usr/share/nginx/invoiceninja/app/Http/Controllers/SelfUpdateController.php(178): file_get_contents()
#3 /usr/share/nginx/invoiceninja/app/Http/Controllers/SelfUpdateController.php(137): App\Http\Controllers\SelfUpdateController->cleanOldSnapChromeBinaries()
#4 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\SelfUpdateController->update()
#5 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction()
#6 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(261): Illuminate\Routing\ControllerDispatcher->dispatch()
#7 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(204): Illuminate\Routing\Route->runController()
#8 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\Routing\Route->run()
#9 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#10 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#11 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
#12 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle()
#13 /usr/share/nginx/invoiceninja/app/Http/Middleware/QueryLogging.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#14 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\QueryLogging->handle()
#15 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#16 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#17 /usr/share/nginx/invoiceninja/app/Http/Middleware/Locale.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#18 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Locale->handle()
#19 /usr/share/nginx/invoiceninja/app/Http/Middleware/PasswordProtection.php(124): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#20 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\PasswordProtection->handle()
#21 /usr/share/nginx/invoiceninja/app/Http/Middleware/TokenAuth.php(96): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\TokenAuth->handle()
#23 /usr/share/nginx/invoiceninja/app/Http/Middleware/SetDb.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#24 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SetDb->handle()
#25 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#26 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\Pipeline\Pipeline->then()
#27 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\Routing\Router->runRouteWithinStack()
#28 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\Routing\Router->runRoute()
#29 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\Routing\Router->dispatchToRoute()
#30 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch()
#31 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#32 /usr/share/nginx/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#33 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestIpMiddleware->handle()
#34 /usr/share/nginx/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#35 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestMiddleware->handle()
#36 /usr/share/nginx/invoiceninja/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#37 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\DisableBrowserCache->handle()
#38 /usr/share/nginx/invoiceninja/app/Http/Middleware/Cors.php(25): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#39 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Cors->handle()
#40 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#41 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#42 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#43 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#44 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#45 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#46 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#47 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#48 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#49 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#50 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#51 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#52 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#53 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then()
#54 /usr/share/nginx/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#55 /usr/share/nginx/invoiceninja/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle()
#56 {main}
"}

I’ve confirmed that revision.txt really doesn’t exist. Was this file included in some previous release maybe? Or is there a way to create it?

We no longer bundle snappdf so this may be a artifact from the version before we removed it.

In that version we also get snappdf to check for a new version, which it looks to be doing here.

The system should still upgrade correctly as this is the final action performed after the upgrade completes?

It just says “server error” and still offers the update in the web/android app, so I don’t think it is completing. Maybe there is another error too? I don’t see one in the Laravel log, but happy to check elsewhere if I know where to look.

In this particular scenario, you may want to download the latest release file from github and overwrite your files to bring it up to date with the latest release.

After that, if you want to run snappdf, execute the command

./vendor/bin/snappdf download 

I tried this, but it breaks the React site.