Closed acelaya closed 5 years ago
What are the usual errors with wkhtml?
I'm getting permission errors when trying to create the images but I think it might be down to my servers security?
The images are written in the data directory, so you have to make sure the user you use to generate previews has enough permissions to write there.
However the problems I have occasionally seen are related to SSL when scrapping https pages.
User has permissions to write to the data directory.
I did originally think it might be an issue with getting https domains so added some test links for http domains but they were the same.
Is anything like exec needed which I might have disabled?
This isn't really a big issue for me so don't spend any time on it as I think it might be my server restrictions, but this is the log:
Shlinkio\Shlink\Common\Exception\PreviewGenerationException: Error generating a preview image with error: sh: 1: bin/wkhtmltoimage: Permission denied in /srv/users/user_name/apps/app_name/module/Common/src/Exception/PreviewGenerationException.php:10
Stack trace:
#0 /srv/users/user_name/apps/app_name/module/Common/src/Service/PreviewGenerator.php(56): Shlinkio\Shlink\Common\Exception\PreviewGenerationException::fromImageError('sh: 1: bin/wkht...')
#1 /srv/users/user_name/apps/app_name/module/Core/src/Action/PreviewAction.php(63): Shlinkio\Shlink\Common\Service\PreviewGenerator->generatePreview('http://www.c4c....')
#2 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Shlinkio\Shlink\Core\Action\PreviewAction->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#3 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive-router/src/Route.php(100): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#4 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive-router/src/RouteResult.php(110): Zend\Expressive\Router\Route->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#5 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive-router/src/Middleware/DispatchMiddleware.php(35): Zend\Expressive\Router\RouteResult->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#6 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Zend\Expressive\Router\Middleware\DispatchMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#7 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(52): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#8 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(91): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#9 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(78): Zend\Stratigility\MiddlewarePipe->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\MiddlewarePipe))
#10 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Middleware/PathMiddlewareDecorator.php(47): Zend\Stratigility\MiddlewarePipe->handle(Object(Zend\Diactoros\ServerRequest))
#11 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(78): Zend\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\MiddlewarePipe))
#12 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(47): Zend\Stratigility\MiddlewarePipe->handle(Object(Zend\Diactoros\ServerRequest))
#13 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive-router/src/Middleware/RouteMiddleware.php(54): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#14 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Zend\Expressive\Router\Middleware\RouteMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#15 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(52): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#16 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(91): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#17 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(78): Zend\Stratigility\MiddlewarePipe->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\MiddlewarePipe))
#18 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Middleware/PathMiddlewareDecorator.php(47): Zend\Stratigility\MiddlewarePipe->handle(Object(Zend\Diactoros\ServerRequest))
#19 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(78): Zend\Stratigility\Middleware\PathMiddlewareDecorator->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\MiddlewarePipe))
#20 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(47): Zend\Stratigility\MiddlewarePipe->handle(Object(Zend\Diactoros\ServerRequest))
#21 /srv/users/user_name/apps/app_name/module/Common/src/Middleware/LocaleMiddleware.php(43): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#22 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Shlinkio\Shlink\Common\Middleware\LocaleMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#23 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(52): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#24 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive-helpers/src/ContentLengthMiddleware.php(31): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#25 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Zend\Expressive\Helper\ContentLengthMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#26 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(52): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#27 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Middleware/ErrorHandler.php(143): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#28 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Middleware/LazyLoadingMiddleware.php(46): Zend\Stratigility\Middleware\ErrorHandler->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#29 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/Next.php(52): Zend\Expressive\Middleware\LazyLoadingMiddleware->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\Next))
#30 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(91): Zend\Stratigility\Next->handle(Object(Zend\Diactoros\ServerRequest))
#31 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-stratigility/src/MiddlewarePipe.php(78): Zend\Stratigility\MiddlewarePipe->process(Object(Zend\Diactoros\ServerRequest), Object(Zend\Stratigility\MiddlewarePipe))
#32 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-httphandlerrunner/src/RequestHandlerRunner.php(95): Zend\Stratigility\MiddlewarePipe->handle(Object(Zend\Diactoros\ServerRequest))
#33 /srv/users/user_name/apps/app_name/vendor/zendframework/zend-expressive/src/Application.php(81): Zend\HttpHandlerRunner\RequestHandlerRunner->run()
#34 /srv/users/user_name/apps/app_name/public/index.php(9): Zend\Expressive\Application->run()
#35 {main} []```
I'm not completely sure, since shlink consumes wkhtmltoimage using an intermediary library, but I would say it's very likely.
This is the library https://github.com/mikehaertl/phpwkhtmltopdf
You could also run the "previews" command with the -vvv flat, which will display information of any unhandled error.
Totally ignore that.
It was a simple permissions issue after all.
I set bin/wkhtmltoimage
to 766 and it's now working.
Sorry for wasting your time!
Yep, I see the error and it seems like it's blocking the command execution.
Really? I would have said the binary was distributed with execution permissions. I'll need to dig into that...
Maybe the error feedback could run a check on the file permissions to let the user know that it can't execute.
Or just chmod the file (but probably ot to 766)
It was set to 666 when I checked. So I checked the execure box which made it 766 and that worked.
I think it could be 760 to remove all public permissions though.
I usually assume 644 has enough for any file to run...
Alternatives: