Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generating a QR code always returns a 500 error #2225

Closed
PasqualePuzio opened this issue Oct 16, 2024 · 8 comments · Fixed by #2226
Closed

Generating a QR code always returns a 500 error #2225

PasqualePuzio opened this issue Oct 16, 2024 · 8 comments · Fixed by #2226
Labels
Milestone

Comments

@PasqualePuzio
Copy link

Shlink version

4.2.2

PHP version

8.3

How do you serve Shlink

Self-hosted RoadRunner

Database engine

MySQL

Database version

8.0.39

Current behavior

Whenever we try to generate a QR code, we get a 500 status code with the message Unexpected error

Expected behavior

We would expect to get the QR code image

Minimum steps to reproduce

This is a fresh installation so we're not sure why the QR code generation is failing (all necessary extensions should be installed).

Is there a way we can get print the stacktrace and get more details about the error?

@acelaya
Copy link
Member

acelaya commented Oct 16, 2024

Is there a way we can get print the stacktrace and get more details about the error?

The service logs should contain more information of the error.

@PasqualePuzio
Copy link
Author

PasqualePuzio commented Oct 16, 2024

Is there a way we can get print the stacktrace and get more details about the error?

The service logs should contain more information of the error.

That's the point indeed: they don't.

I'm running shlink this way: ./bin/rr serve -c config/roadrunner/.rr.yml

and the only logs I see are: 2024-10-16T15:35:52+0000 INFO server [2024-10-16T17:35:52.215567+02:00] [6300b7c8-d1ab-404d-bb10-fa83b1b1fb3e] Access.INFO - GET /testqrcode/qr-code 500 28

I've tried to change the roadrunner configuration (.rr.yml) but even in development mode, I can't see the stacktrace.

Where can I find more detailed logs?

Thanks

@acelaya
Copy link
Member

acelaya commented Oct 16, 2024

That's the point indeed: they don't.

Sorry, my bad. The application logs should be in the data/logs data/log folder of the Shlink instance.

If the folder is empty, then the problem is the lack of permissions to write logs (or other assets), which would cause a 500 error.

@PasqualePuzio
Copy link
Author

Looks like it depends on the missing logo url. Here's the stacktrace.

During the installation I understood that logo was not required, but after looking at the source code it looks like it is.

Could you please clarify if the logo is required to generate a QR-code ?

[2024-10-16T17:37:39.463254+02:00] [4184bee6-b0fc-4905-b556-87c13e5437ac] Shlink.ERROR - ValueError: Path cannot be empty in /opt/shlink/vendor/endroid/qr-code/src/ImageData/LogoImageData.php:24 Stack trace: #0 /opt/shlink/vendor/endroid/qr-code/src/ImageData/LogoImageData.php(24): file_get_contents() #1 /opt/shlink/vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php(131): Endroid\QrCode\ImageData\LogoImageData::createForLogo() #2 /opt/shlink/vendor/endroid/qr-code/src/Writer/AbstractGdWriter.php(119): Endroid\QrCode\Writer\AbstractGdWriter->addLogo() #3 /opt/shlink/vendor/endroid/qr-code/src/Writer/PngWriter.php(25): Endroid\QrCode\Writer\AbstractGdWriter->write() #4 /opt/shlink/vendor/endroid/qr-code/src/Builder/Builder.php(235): Endroid\QrCode\Writer\PngWriter->write() #5 /opt/shlink/module/Core/src/Action/QrCodeAction.php(61): Endroid\QrCode\Builder\Builder->build() #6 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Core\Action\QrCodeAction->process() #7 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #8 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #9 /opt/shlink/vendor/mezzio/mezzio-router/src/Route.php(79): Laminas\Stratigility\MiddlewarePipe->process() #10 /opt/shlink/vendor/mezzio/mezzio-router/src/RouteResult.php(109): Mezzio\Router\Route->process() #11 /opt/shlink/vendor/mezzio/mezzio-router/src/Middleware/DispatchMiddleware.php(32): Mezzio\Router\RouteResult->process() #12 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\DispatchMiddleware->process() #13 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #14 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #15 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process() #16 /opt/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(42): Laminas\Stratigility\Next->handle() #17 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process() #18 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle() #19 /opt/shlink/vendor/mezzio/mezzio-router/src/Middleware/ImplicitHeadMiddleware.php(77): Laminas\Stratigility\Next->handle() #20 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\ImplicitHeadMiddleware->process() #21 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #22 /opt/shlink/vendor/mezzio/mezzio-router/src/Middleware/RouteMiddleware.php(50): Laminas\Stratigility\Next->handle() #23 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Mezzio\Router\Middleware\RouteMiddleware->process() #24 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #25 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #26 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process() #27 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle() #28 /opt/shlink/vendor/shlinkio/shlink-common/src/Middleware/CloseDbConnectionMiddleware.php(24): Laminas\Stratigility\Next->handle() #29 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\CloseDbConnectionMiddleware->process() #30 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #31 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #32 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process() #33 /opt/shlink/vendor/laminas/laminas-stratigility/src/Middleware/PathMiddlewareDecorator.php(42): Laminas\Stratigility\Next->handle() #34 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\Middleware\PathMiddlewareDecorator->process() #35 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(45): Laminas\Stratigility\Next->handle() #36 /opt/shlink/module/Rest/src/Middleware/CrossDomainMiddleware.php(24): Laminas\Stratigility\Next->handle() #37 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Rest\Middleware\CrossDomainMiddleware->process() #38 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #39 /opt/shlink/vendor/laminas/laminas-stratigility/src/Middleware/ErrorHandler.php(129): Laminas\Stratigility\Next->handle() #40 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Laminas\Stratigility\Middleware\ErrorHandler->process() #41 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #42 /opt/shlink/vendor/shlinkio/shlink-common/src/Middleware/RequestIdMiddleware.php(33): Laminas\Stratigility\Next->handle() #43 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\RequestIdMiddleware->process() #44 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #45 /opt/shlink/vendor/shlinkio/shlink-common/src/Middleware/ContentLengthMiddleware.php(16): Laminas\Stratigility\Next->handle() #46 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\ContentLengthMiddleware->process() #47 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #48 /opt/shlink/vendor/shlinkio/shlink-common/src/Middleware/AccessLogMiddleware.php(26): Laminas\Stratigility\Next->handle() #49 /opt/shlink/vendor/mezzio/mezzio/src/Middleware/LazyLoadingMiddleware.php(26): Shlinkio\Shlink\Common\Middleware\AccessLogMiddleware->process() #50 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Mezzio\Middleware\LazyLoadingMiddleware->process() #51 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #52 /opt/shlink/vendor/laminas/laminas-stratigility/src/Next.php(52): Laminas\Stratigility\MiddlewarePipe->process() #53 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(77): Laminas\Stratigility\Next->handle() #54 /opt/shlink/vendor/laminas/laminas-stratigility/src/MiddlewarePipe.php(66): Laminas\Stratigility\MiddlewarePipe->process() #55 /opt/shlink/vendor/mezzio/mezzio/src/Application.php(34): Laminas\Stratigility\MiddlewarePipe->handle() #56 /opt/shlink/bin/roadrunner-worker.php(25): Mezzio\Application->handle() #57 /opt/shlink/bin/roadrunner-worker.php(36): {closure}() #58 {main}

@acelaya
Copy link
Member

acelaya commented Oct 17, 2024

I think this is a regression introduced in v4.2.2, by this change specifically shlinkio/shlink-config#37

With that, configuration options that were not set (like the QR code logo) are being set with an empty value, instead of skipped.

In this particular case, the logic underneath thinks the logo was set, but the value is empty, causing this error.

I'll try to fix this.

@acelaya
Copy link
Member

acelaya commented Oct 17, 2024

I have just released v4.2.3, which should fix this issue

@PasqualePuzio
Copy link
Author

I have just released v4.2.3, which should fix this issue

Thank you very much. I'll try to update it right away.

@PasqualePuzio
Copy link
Author

It's fixed now !!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Archived in project
2 participants