Hi.
I’m unable to create PDFs after today’s update. Is there a fix?
Thank you
Blockquote
ErrorException: require(/var/www/invoiceninja/lang/sl/texts.php): Failed to open stream: Permission denied in /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:123
Stack trace:
#0 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(256): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()
#1 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(123): Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap{closure}()
#2 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(123): require(‘…’)
#3 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(124): Illuminate\Filesystem\Filesystem::Illuminate\Filesystem{closure}()
#4 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php(129): Illuminate\Filesystem\Filesystem->getRequire()
#5 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php(816): Illuminate\Translation\FileLoader->Illuminate\Translation{closure}()
#6 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php(127): Illuminate\Support\Collection->reduce()
#7 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php(68): Illuminate\Translation\FileLoader->loadPaths()
#8 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/Translator.php(324): Illuminate\Translation\FileLoader->load()
#9 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/Translator.php(237): Illuminate\Translation\Translator->load()
#10 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Translation/Translator.php(164): Illuminate\Translation\Translator->getLine()
#11 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(974): Illuminate\Translation\Translator->get()
#12 /var/www/invoiceninja/app/Helpers/TranslationHelper.php(25): trans()
#13 /var/www/invoiceninja/app/Utils/HtmlEngine.php(142): ctrans()
#14 /var/www/invoiceninja/app/Utils/HtmlEngine.php(876): App\Utils\HtmlEngine->buildEntityDataArray()
#15 /var/www/invoiceninja/app/Repositories/ActivityRepository.php(233): App\Utils\HtmlEngine->generateLabelsAndValues()
#16 /var/www/invoiceninja/app/Repositories/ActivityRepository.php(98): App\Repositories\ActivityRepository->generateHtml()
#17 /var/www/invoiceninja/app/Repositories/ActivityRepository.php(69): App\Repositories\ActivityRepository->createBackup()
#18 /var/www/invoiceninja/app/Listeners/Activity/QuoteUpdatedActivity.php(56): App\Repositories\ActivityRepository->save()
#19 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Events/CallQueuedListener.php(114): App\Listeners\Activity\QuoteUpdatedActivity->handle()
#20 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Events\CallQueuedListener->handle()
#21 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container{closure}()
#22 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure()
#23 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod()
#24 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/Container.php(690): Illuminate\Container\BoundMethod::call()
#25 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(128): Illuminate\Container\Container->call()
#26 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\Bus\Dispatcher->Illuminate\Bus{closure}()
#27 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
#28 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(132): Illuminate\Pipeline\Pipeline->then()
#29 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(124): Illuminate\Bus\Dispatcher->dispatchNow()
#30 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue{closure}()
#31 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}()
#32 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(123): Illuminate\Pipeline\Pipeline->then()
#33 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(71): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#34 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(102): Illuminate\Queue\CallQueuedHandler->call()
#35 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(440): Illuminate\Queue\Jobs\Job->fire()
#36 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(390): Illuminate\Queue\Worker->process()
#37 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(177): Illuminate\Queue\Worker->runJob()
#38 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(139): Illuminate\Queue\Worker->daemon()
#39 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(122): Illuminate\Queue\Console\WorkCommand->runWorker()
#40 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle()
#41 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/Util.php(43): Illuminate\Container\BoundMethod::Illuminate\Container{closure}()
#42 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure()
#43 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(35): Illuminate\Container\BoundMethod::callBoundMethod()
#44 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Container/Container.php(690): Illuminate\Container\BoundMethod::call()
#45 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Console/Command.php(213): Illuminate\Container\Container->call()
#46 /var/www/invoiceninja/vendor/symfony/console/Command/Command.php(279): Illuminate\Console\Command->execute()
#47 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Console/Command.php(182): Symfony\Component\Console\Command\Command->run()
#48 /var/www/invoiceninja/vendor/symfony/console/Application.php(1047): Illuminate\Console\Command->run()
#49 /var/www/invoiceninja/vendor/symfony/console/Application.php(316): Symfony\Component\Console\Application->doRunCommand()
#50 /var/www/invoiceninja/vendor/symfony/console/Application.php(167): Symfony\Component\Console\Application->doRun()
#51 /var/www/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(197): Symfony\Component\Console\Application->run()
#52 /var/www/invoiceninja/artisan(35): Illuminate\Foundation\Console\Kernel->handle()
#53 {main}
hillel
January 7, 2025, 9:54am
2
Hi,
Are you using the latest available version?
I restored my VM to last night’s backup (v5.11.0-W171)
It works again, but I’m afraid to do any updates.
Please let me know when it’s safe to update.
Thank you
We also have problems generating PDFs since one of the last updates. From the laravel.log:
[2025-01-07 11:57:16] production.ERROR: There was an issue generating the PDF locally {"userId":1,"exception":"[object] (Exception(code: 0): There was an issue generating the PDF locally at /var/www/html/invoiceninja/app/Services/Pdf/PdfService.php:107)
[stacktrace]
#0 /var/www/html/invoiceninja/app/Http/Controllers/PreviewController.php(88): App\\Services\\Pdf\\PdfService->getPdf()
#1 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\\Http\\Controllers\\PreviewController->live()
#2 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\\Routing\\Controller->callAction()
#3 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(21): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#4 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingRoutingDispatcher.php(18): Sentry\\Laravel\\Tracing\\Routing\\TracingControllerDispatcherTracing->Sentry\\Laravel\\Tracing\\Routing\\{closure}()
#5 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Routing/TracingControllerDispatcherTracing.php(20): Sentry\\Laravel\\Tracing\\Routing\\TracingRoutingDispatcher->wrapRouteDispatch()
#6 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(266): Sentry\\Laravel\\Tracing\\Routing\\TracingControllerDispatcherTracing->dispatch()
#7 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\Route->runController()
#8 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\\Routing\\Route->run()
#9 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#10 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(124): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#11 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(89): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequestUsingNamedLimiter()
#12 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#13 /var/www/html/invoiceninja/app/Http/Middleware/QueryLogging.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#14 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\QueryLogging->handle()
#15 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(51): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#16 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#17 /var/www/html/invoiceninja/app/Http/Middleware/Locale.php(95): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#18 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\Locale->handle()
#19 /var/www/html/invoiceninja/app/Http/Middleware/TokenAuth.php(102): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#20 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\TokenAuth->handle()
#21 /var/www/html/invoiceninja/app/Http/Middleware/SetDb.php(40): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#22 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\SetDb->handle()
#23 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#24 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\\Pipeline\\Pipeline->then()
#25 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\\Routing\\Router->runRouteWithinStack()
#26 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\\Routing\\Router->runRoute()
#27 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\\Routing\\Router->dispatchToRoute()
#28 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(201): Illuminate\\Routing\\Router->dispatch()
#29 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#30 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/FlushEventsMiddleware.php(13): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#31 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Sentry\\Laravel\\Http\\FlushEventsMiddleware->handle()
#32 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestIpMiddleware.php(45): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#33 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Sentry\\Laravel\\Http\\SetRequestIpMiddleware->handle()
#34 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Http/SetRequestMiddleware.php(31): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#35 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Sentry\\Laravel\\Http\\SetRequestMiddleware->handle()
#36 /var/www/html/invoiceninja/vendor/livewire/livewire/src/Features/SupportDisablingBackButtonCache/DisableBackButtonCacheMiddleware.php(19): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#37 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Livewire\\Features\\SupportDisablingBackButtonCache\\DisableBackButtonCacheMiddleware->handle()
#38 /var/www/html/invoiceninja/app/Http/Middleware/Cors.php(24): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): App\\Http\\Middleware\\Cors->handle()
#40 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(58): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#42 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#44 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#45 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(51): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#47 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#48 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Http\\Middleware\\ValidatePostSize->handle()
#50 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(110): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#52 /var/www/html/invoiceninja/vendor/sentry/sentry-laravel/src/Sentry/Laravel/Tracing/Middleware.php(79): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Sentry\\Laravel\\Tracing\\Middleware->handle()
#54 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#55 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Pipeline\\Pipeline->then()
#56 /var/www/html/invoiceninja/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(145): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#57 /var/www/html/invoiceninja/public/index.php(56): Illuminate\\Foundation\\Http\\Kernel->handle()
#58 {main}
"}
We also got errors concerning file permissions but that error doesn’t show up anymore interestingly:
[2025-01-07 11:56:56] production.ERROR: Unable to generate the raw PDF {"userId":2,"exception":"[object] (App\\Exceptions\\FilePermissionsFailure(code: 0): Unable to generate the raw PDF at /var/www/html/invoiceninja/app/Jobs/Entity/CreateRawPdf.php:115)
[stacktrace]
I tried to update today with latest 5.11.17. Same thing. PDF creation is still broken.
Restored the VM snapshot back to 5.11.0
Br
Also, from your error log it appears that your issue may be file permission related - I’d make sure everything with permissions is correct, owned by correct user, etc…
I had this same issue and was able to fix by:
Ensuring Snappdf was properly installed
Ensuring the binary was executable (chmod +x as www-data to everything in bin dir, as they should all be executable, no?)
Having it redownload headless chrome. Got the command from ./snappdf --help or similar
Of course that’s all predicated on you using snappdf. Hopefully useful to someone
2 Likes
xoo
January 11, 2025, 11:55am
9
I had the same issue. My steps to fix:
cd $INVOICENINJA
chmod +x vendor/bin/snappdf
sudo -u www-data vendor/bin/snappdf download --force
2 Likes
Thank you #jasonridesabike and #xoo
It works.
hillel
January 11, 2025, 6:35pm
11
Thanks for letting us know, and thank you @jasonridesabike and @xoo !
cc @david
Fred10
January 22, 2025, 3:17am
12
I am running invoice ninja as a docker container and I can’t find the vendor/bin folder in my mounted image.
I was able to find it by connecting to the terminal of theapp container. Inside the container it is located here: /var/www/html/vendor/beganovich
Using chmod +x snappdf in that folder was actually enough to get it working again
EDIT: Update it doesn’t work again. It would let me download one invoice and now it’s broken again… still looking for a permanent solution
EDIT2: Could this env variable maybe be wrong? SNAPPDF_CHROMIUM_PATH=/usr/bin/google-chrome-stable
EDIT3: I was able to “solve” it by using the PhantomJS API pdf creation. Both for my old and new docker builds.
Used these env variables with the free tier api Key from this website https://phantomjscloud.com/
PHANTOMJS_PDF_GENERATION=true
PDF_GENERATOR=phantomjs
PHANTOMJS_CLOUD_KEY=INSERT-API-KEY-HERE
1 Like