V5 Migration Trouble

I’m having issues migrating from self hosted 4.5.50 to 5.5.24.

I performed the installation of both of them using Softaculous on a WHM/cPanel server. For the v5 installation I have MultiPHP set to PHP 8.1 for the domain with all required PHP extensions installed.

I get to the very last step and the migration seems to hang for a few seconds and then I receive the message: Server error: POST https://companyname.com/inv/public/api/v1/migration/start resulted in a 500 Internal Server Error response: { “message”: “Server Error” }

There’s nothing interesting in the web server logs.

The company gets created in v5 and some of the data is there, but it’s far from complete.

Here are some other potentially relevant details:

I am using API_SECRET in .env and I have made sure the keys are in both the old and new .env and entered the key into the box provided during the migration.

Cron job is as follows: * * * * * cd /home/companyname/public_html/inv && /opt/cpanel/ea-php81/root/usr/bin/php -d register_argc_argv=On artisan schedule:run >> /dev/null 2>&1

Here is my laravel.log file from the v5 installation and you can see where it starts to go wrong near the top with the call to undefined function:

[2022-10-04 16:46:33] production.INFO: Importing account
[2022-10-04 16:46:33] production.INFO: Importing company
[2022-10-04 16:46:33] production.INFO: Importing users
[2022-10-04 16:46:33] production.INFO: Importing payment_terms
[2022-10-04 16:46:33] production.INFO: Importing tax_rates
[2022-10-04 16:46:33] production.INFO: Importing clients
[2022-10-04 16:46:38] production.INFO: Importing company_gateways
[2022-10-04 16:46:38] production.INFO: Importing client_gateway_tokens
[2022-10-04 16:46:38] production.INFO: Importing vendors
[2022-10-04 16:46:42] production.INFO: Importing projects
[2022-10-04 16:46:42] production.INFO: Importing products
[2022-10-04 16:46:43] production.INFO: Importing credits
[2022-10-04 16:46:43] production.INFO: Call to undefined function App\Models\iconv_strlen()
[2022-10-04 16:46:43] production.ERROR: Call to undefined function App\Models\iconv_strlen() {“userId”:1,“exception”:"[object] (Error(code: 0): Call to undefined function App\Models\iconv_strlen() at /home/companyname/public_html/inv/app/Models/Client.php:374)
[stacktrace]
#0 /home/companyname/public_html/inv/app/Models/Client.php(313): App\Models\Client->getSetting(‘currency_id’)
#1 [internal function]: App\Models\Client->App\Models\{closure}(Object(App\Models\Currency), 0)
#2 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Collections/Arr.php(795): array_filter(Array, Object(Closure), 1)
#3 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Collections/Collection.php(368): Illuminate\Support\Arr::where(Array, Object(Closure))
#4 /home/companyname/public_html/inv/app/Models/Client.php(314): Illuminate\Support\Collection->filter(Object(Closure))
#5 /home/companyname/public_html/inv/app/Helpers/Invoice/InvoiceSum.php(59): App\Models\Client->currency()
#6 /home/companyname/public_html/inv/app/Models/Credit.php(226): App\Helpers\Invoice\InvoiceSum->__construct(Object(App\Models\Credit))
#7 /home/companyname/public_html/inv/app/Repositories/BaseRepository.php(286): App\Models\Credit->calc()
#8 /home/companyname/public_html/inv/app/Repositories/CreditRepository.php(39): App\Repositories\BaseRepository->alternativeSave(Array, Object(App\Models\Credit))
#9 /home/companyname/public_html/inv/app/Jobs/Util/Import.php(1095): App\Repositories\CreditRepository->save(Array, Object(App\Models\Credit))
#10 /home/companyname/public_html/inv/app/Jobs/Util/Import.php(226): App\Jobs\Util\Import->processCredits(Array)
#11 /home/companyname/public_html/inv/app/Jobs/Util/StartMigration.php(119): App\Jobs\Util\Import->handle()
#12 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): App\Jobs\Util\StartMigration->handle()
#13 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#14 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#15 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#16 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#17 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\Container\Container->call(Array)
#18 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(App\Jobs\Util\StartMigration))
#19 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(App\Jobs\Util\StartMigration))
#20 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#21 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(124): Illuminate\Bus\Dispatcher->dispatchNow(Object(App\Jobs\Util\StartMigration), false)
#22 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object(App\Jobs\Util\StartMigration))
#23 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(App\Jobs\Util\StartMigration))
#24 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(126): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#25 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(70): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware(Object(Illuminate\Queue\Jobs\SyncJob), Object(App\Jobs\Util\StartMigration))
#26 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\SyncJob), Array)
#27 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Queue/SyncQueue.php(43): Illuminate\Queue\Jobs\Job->fire()
#28 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(253): Illuminate\Queue\SyncQueue->push(Object(App\Jobs\Util\StartMigration))
#29 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(229): Illuminate\Bus\Dispatcher->pushCommandToQueue(Object(Illuminate\Queue\SyncQueue), Object(App\Jobs\Util\StartMigration))
#30 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(77): Illuminate\Bus\Dispatcher->dispatchToQueue(Object(App\Jobs\Util\StartMigration))
#31 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Bus/PendingDispatch.php(193): Illuminate\Bus\Dispatcher->dispatch(Object(App\Jobs\Util\StartMigration))
#32 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Bus/Dispatchable.php(18): Illuminate\Foundation\Bus\PendingDispatch->__destruct()
#33 /home/companyname/public_html/inv/app/Http/Controllers/MigrationController.php(435): App\Jobs\Util\StartMigration::dispatch(‘migrations/HWYS…’, Object(App\Models\User), Object(App\Models\Company))
#34 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\MigrationController->startMigration(Object(Illuminate\Http\Request))
#35 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction(‘startMigration’, Array)
#36 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(261): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\MigrationController), ‘startMigration’)
#37 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Route.php(204): Illuminate\Routing\Route->runController()
#38 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(725): Illuminate\Routing\Route->run()
#39 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#40 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#41 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(62): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest(Object(Illuminate\Http\Request), Object(Closure), Array)
#42 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), ‘300’, ‘1’)
#43 /home/companyname/public_html/inv/app/Http/Middleware/QueryLogging.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#44 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\QueryLogging->handle(Object(Illuminate\Http\Request), Object(Closure))
#45 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#46 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#47 /home/companyname/public_html/inv/app/Http/Middleware/Locale.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Locale->handle(Object(Illuminate\Http\Request), Object(Closure))
#49 /home/companyname/public_html/inv/app/Http/Middleware/TokenAuth.php(96): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#50 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\TokenAuth->handle(Object(Illuminate\Http\Request), Object(Closure))
#51 /home/companyname/public_html/inv/app/Http/Middleware/SetDb.php(40): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#52 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SetDb->handle(Object(Illuminate\Http\Request), Object(Closure))
#53 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#54 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(726): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#55 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(703): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#56 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(667): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#57 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Routing/Router.php(656): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#58 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(167): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#59 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#60 /home/companyname/public_html/inv/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#61 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestIpMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#62 /home/companyname/public_html/inv/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#63 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Sentry\Laravel\Http\SetRequestMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))
#64 /home/companyname/public_html/inv/vendor/livewire/livewire/src/DisableBrowserCache.php(19): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#65 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Livewire\DisableBrowserCache->handle(Object(Illuminate\Http\Request), Object(Closure))
#66 /home/companyname/public_html/inv/app/Http/Middleware/Cors.php(25): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#67 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\Cors->handle(Object(Illuminate\Http\Request), Object(Closure))
#68 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#69 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#70 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#71 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#72 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle(Object(Illuminate\Http\Request), Object(Closure))
#73 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#74 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#75 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle(Object(Illuminate\Http\Request), Object(Closure))
#76 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#77 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#78 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#79 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle(Object(Illuminate\Http\Request), Object(Closure))
#80 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#81 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(142): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#82 /home/companyname/public_html/inv/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(111): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#83 /home/companyname/public_html/inv/public/index.php(57): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#84 {main}
"}

Any help is greatly appreciated.

This is the second time I’ve seen iconv() come up, it looks like cPanel is not installing this extension by default. Can you enable the iconv() extension in v5 and then reattempt the migration please.

You’re correct, iconv wasn’t enabled and I should have caught that. Sorry about that.

I ran the migration again and it still gave me a 500 error in v4 and the migration seems to have stopped at importing documents. There are no errors in laravel.log, it just ends with importing documents. I received an email saying the migration was completed and the data seems to be there in v5. I checked a few invoices that include attachments and the documents are there. I’m assuming those are the documents it’s referring to.

[2022-10-05 13:11:57] production.INFO: Importing account
[2022-10-05 13:11:57] production.INFO: Importing company
[2022-10-05 13:11:57] production.INFO: Importing users
[2022-10-05 13:11:57] production.INFO: Importing payment_terms
[2022-10-05 13:11:57] production.INFO: Importing tax_rates
[2022-10-05 13:11:57] production.INFO: Importing clients
[2022-10-05 13:12:02] production.INFO: Importing company_gateways
[2022-10-05 13:12:02] production.INFO: Importing client_gateway_tokens
[2022-10-05 13:12:02] production.INFO: Importing vendors
[2022-10-05 13:12:06] production.INFO: Importing projects
[2022-10-05 13:12:06] production.INFO: Importing products
[2022-10-05 13:12:07] production.INFO: Importing credits
[2022-10-05 13:12:07] production.INFO: Importing recurring_invoices
[2022-10-05 13:12:08] production.INFO: Importing invoices
[2022-10-05 13:13:06] production.INFO: Importing quotes
[2022-10-05 13:13:10] production.INFO: Importing payments
[2022-10-05 13:13:48] production.INFO: Importing expense_categories
[2022-10-05 13:13:48] production.INFO: Importing task_statuses
[2022-10-05 13:13:48] production.INFO: in task statuses
[2022-10-05 13:13:48] production.INFO: finished task statuses
[2022-10-05 13:13:48] production.INFO: Importing expenses
[2022-10-05 13:13:54] production.INFO: Importing recurring_expenses
[2022-10-05 13:13:54] production.INFO: Importing tasks
[2022-10-05 13:13:54] production.INFO: Importing documents