Upgrading to v5.5

Hello @david

over the weekend I upgraded from v5.4.12 to v5.5.17. Because I was running on a pre-used Ubuntu 20.04 and php7.4 I decided to set up a new VM with Ubuntu 22.04 that comes with php8.1 out of the box, install v5.4.12 (as to not alter the DB structure in this step), dump the DB tables from the old system and load them on the new system, move public/storage, and eventually on the new system use the in-app upgrade feature to get to v5.5.17.

I didn’t add DROP and CREATE statements to the DB dump. Loading the DB on the new system I surprisingly found a difference in the database structure. In my new installation of v5.4.12 the accounts table had a field “inapp_transaction_id, varchar(100)”, that wasn’t present on my old installation of v5.4.12. Looks like this field got added to the accounts table sometime between v5.2.16 (my first installed version on the old system) and v5.4.12, but the addition wasn’t covered in the migration scripts. So beware, there might be a lot of installations out there missing this field (not sure about the consequences of the field being absent).

Hi,

@david any thoughts?

@xoo

Thanks for reporting this, I’ve had a look through and can see that particular field was added back in January this year:

2022_01_27_223617_add_client_count_to_accounts_table.php

along with two other fields

hosted_client_count
hosted_company_count

Fortunately these are only referenced in our hosted codebase so even without them it should not cause any issues at all.

I am puzzled as to how your DB could have missed this.

@david

That’s very strange, as ‘hosted_client_count’ and ‘hosted_company_count’ both existed in the table.

The only other issue I could think of is: Since maybe 9 month I occasionally receive “FormatException: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data” when upgrading. The message doesn’t appear with every update, but quite regularly. Until now the upgrades seemed to succeed anyway, despite of this error message. Other blog posts here suggest, memory usage is somewhat connected to this. Around the time this started I also had a memory allocation error in the logs that triggered me to raise my php memory limit from 128M to 256M. Since my remembrance of time durations may be blurry the memory allocation error might coincide with the upgrade executing 2022_01_27_223617_add_client_count_to_accounts_table.php

I still get the json parse error, but with different error messages in the logs. (I can supply those if you want.)

Yes, please advise the errors you are seeing, we’ll check them out.

Ok, here it goes.

/var/log/nginx/ininja.error.log:

2022/08/29 01:22:23 [error] 5231#5231: *1023 FastCGI sent in stderr: “PHP message: PHP Fatal error: Declaration of Symfony\Component\HttpFoundation\ResponseHeaderBag::set(string $key, array|string|null $values, bool $replace = true) must be compatible with Symfony\Component\HttpFoundation\HeaderBag::set(string $key, $values, bool $replace = true) in /var/www/invoiceninja/vendor/symfony/http-foundation/ResponseHeaderBag.php on line 109PHP message: PHP Fatal error: Uncaught Error: Class “Illuminate\Http\JsonResponse” not found in /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php:686
Stack trace:
#0 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(446): Illuminate\Foundation\Exceptions\Handler->prepareJsonResponse()
#1 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(366): Illuminate\Foundation\Exceptions\Handler->renderExceptionResponse()
#2 /var/www/invoiceninja/app/Exceptions/Handler.php(209): Illuminate\Foundation\Exceptions\Handler->render()
#3 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(196): App\Exceptions\Handler->render()
#4 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(173): Illuminate\Foundation\Bootstrap\HandleExceptions->renderHttpResponse()
#5 /var/www/invoiceninja/vendor/lar” while reading response header from upstream, client: dead:beef::f00, server: in.example.com, request: “POST /api/v1/self-update? HTTP/2.0”, upstream: “fastcgi://unix:/run/php/php-fpm.sock:”, host: “in.example.com”, referrer: “https://in.example.com/

storage/logs/laravel.log:

[2022-08-29 01:22:23] production.ERROR: Call to undefined method Illuminate\Console\Application::setContainerCommandLoader() {“userId”:1,“exception”:"[object] (Error(code: 0): Call to undefined method Illuminate\Console\Application::setContainerCommandLoader() at /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:332)
[stacktrace]
#0 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(263): Illuminate\Foundation\Console\Kernel->getArtisan()
#1 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(261): Illuminate\Foundation\Console\Kernel->call()
#2 /var/www/invoiceninja/app/Http/Controllers/SelfUpdateController.php(181): Illuminate\Support\Facades\Facade::__callStatic()
#3 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\SelfUpdateController->update()
#4 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction()
#5 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(262): Illuminate\Routing\ControllerDispatcher->dispatch()
#6 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#7 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(721): Illuminate\Routing\Route->run()
#8 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#9 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#10 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(63): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
#11 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\ThrottleRequests->handle()
#12 /var/www/invoiceninja/app/Http/Middleware/QueryLogging.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#13 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\QueryLogging->handle()
#14 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#15 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#16 /var/www/invoiceninja/app/Http/Middleware/Locale.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#17 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\Locale->handle()
#18 /var/www/invoiceninja/app/Http/Middleware/PasswordProtection.php(124): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#19 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\PasswordProtection->handle()
#20 /var/www/invoiceninja/app/Http/Middleware/TokenAuth.php(99): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#21 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\TokenAuth->handle()
#22 /var/www/invoiceninja/app/Http/Middleware/SetDb.php(41): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#23 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\SetDb->handle()
#24 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#25 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(723): Illuminate\Pipeline\Pipeline->then()
#26 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(698): Illuminate\Routing\Router->runRouteWithinStack()
#27 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\Routing\Router->runRoute()
#28 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(651): Illuminate\Routing\Router->dispatchToRoute()
#29 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch()
#30 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#31 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#32 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Sentry\Laravel\Http\SetRequestIpMiddleware->handle()
#33 /var/www/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#34 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Sentry\Laravel\Http\SetRequestMiddleware->handle()
#35 /var/www/invoiceninja/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#36 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Livewire\DisableBrowserCache->handle()
#37 /var/www/invoiceninja/app/Http/Middleware/Cors.php(25): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#38 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\Http\Middleware\Cors->handle()
#39 /var/www/invoiceninja/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fideloper\Proxy\TrustProxies->handle()
#41 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#42 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#43 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#44 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#45 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#46 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#47 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#48 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#49 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#50 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#51 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#52 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then()
#53 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#54 /var/www/invoiceninja/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle()
#55 {main}
“}
[2022-08-29 01:22:23] production.ERROR: Declaration of Symfony\Component\HttpFoundation\ResponseHeaderBag::set(string $key, array|string|null $values, bool $replace = true) must be compatible with Symfony\Component\HttpFoundation\HeaderBag::set(string $key, $values, bool $replace = true) {“userId”:1,“exception”:”[object] (Symfony\Component\ErrorHandler\Error\FatalError(code: 0): Declaration of Symfony\Component\HttpFoundation\ResponseHeaderBag::set(string $key, array|string|null $values, bool $replace = true) must be compatible with Symfony\Component\HttpFoundation\HeaderBag::set(string $key, $values, bool $replace = true) at /var/www/invoiceninja/vendor/symfony/http-foundation/ResponseHeaderBag.php:109)
[stacktrace]
#0 {main}
"}