stefandoorn / sitemap-plugin

Sitemap Plugin for Sylius eCommerce platform
MIT License
78 stars 43 forks source link

"No session available" when generating sitemap #228

Open wdttilburg opened 1 year ago

wdttilburg commented 1 year ago

Hi,

I am using stefandoorn/sitemap-plugin v2.0.1, Sylius 1.12.3 and Symfony ^5.4 and am running into an error when generating the sitemap.

In RequestStack.php line 126:

  [Symfony\Component\HttpFoundation\Exception\SessionNotFoundException]  
  There is currently no session available.    

Exception trace:
  at /var/www/public_html/vendor/symfony/http-foundation/RequestStack.php:126
 Symfony\Component\HttpFoundation\RequestStack->getSession() at /var/www/public_html/vendor/sylius/resource-bundle/src/Bundle/Storage/SessionStorage.php:81
 Sylius\Bundle\ResourceBundle\Storage\SessionStorage->getSession() at /var/www/public_html/vendor/sylius/resource-bundle/src/Bundle/Storage/SessionStorage.php:56
 Sylius\Bundle\ResourceBundle\Storage\SessionStorage->get() at /var/www/public_html/vendor/sylius/sylius/src/Sylius/Component/Core/Locale/LocaleStorage.php:33
 Sylius\Component\Core\Locale\LocaleStorage->get() at /var/www/public_html/vendor/sylius/sylius/src/Sylius/Component/Core/Locale/Context/StorageBasedLocaleContext.php:37
 Sylius\Component\Core\Locale\Context\StorageBasedLocaleContext->getLocaleCode() at /var/www/public_html/vendor/sylius/sylius/src/Sylius/Component/Locale/Context/CompositeLocaleContext.php:43
 Sylius\Component\Locale\Context\CompositeLocaleContext->getLocaleCode() at /var/www/public_html/vendor/sylius/sylius/src/Sylius/Bundle/ShopBundle/Router/LocaleStrippingRouter.php:42
 Sylius\Bundle\ShopBundle\Router\LocaleStrippingRouter->generate() at /var/www/public_html/vendor/stefandoorn/sitemap-plugin/src/Provider/ProductUrlProvider.php:142
 SitemapPlugin\Provider\ProductUrlProvider->createProductUrl() at /var/www/public_html/vendor/stefandoorn/sitemap-plugin/src/Provider/ProductUrlProvider.php:72
 SitemapPlugin\Provider\ProductUrlProvider->generate() at /var/www/public_html/vendor/stefandoorn/sitemap-plugin/src/Builder/SitemapBuilder.php:39
 SitemapPlugin\Builder\SitemapBuilder->build() at /var/www/public_html/vendor/stefandoorn/sitemap-plugin/src/Command/GenerateSitemapCommand.php:78
 SitemapPlugin\Command\GenerateSitemapCommand->executeChannel() at /var/www/public_html/vendor/stefandoorn/sitemap-plugin/src/Command/GenerateSitemapCommand.php:63
 SitemapPlugin\Command\GenerateSitemapCommand->execute() at /var/www/public_html/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /var/www/public_html/vendor/symfony/console/Application.php:1058
 Symfony\Component\Console\Application->doRunCommand() at /var/www/public_html/vendor/symfony/framework-bundle/Console/Application.php:96
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /var/www/public_html/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at /var/www/public_html/vendor/symfony/framework-bundle/Console/Application.php:82
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/public_html/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /var/www/public_html/bin/console:38

As a workaround, I created a custom controller where I execute copy pasted code of the sitemap command which does not run into this error.

stefandoorn commented 1 year ago

This feels like the locale context is using sessions somewhere. Are you maybe able to debug this and provide a PR?

wdttilburg commented 1 year ago

I'll have a try

wdttilburg commented 1 year ago

I can't manage to find a solution. It seems that Symfony's router can generate an URL with query param ?_locale=nl for example, and that Sylius wants to strip this. In stripping this, it uses the current locale and that is retrieved from the session request.

Besides the problem above, this line also eventually tries to retrieve the session: https://github.com/stefandoorn/sitemap-plugin/blob/master/src/Provider/ProductUrlProvider.php#L146 Causing the trace below (some line numbers may be different due to debug statements)

Exception trace:
  at /var/www/public_html/vendor/symfony/http-foundation/RequestStack.php:126
 Symfony\Component\HttpFoundation\RequestStack->getSession() at /var/www/public_html/vendor/sylius/resource-bundle/src/Bundle/Storage/SessionStorage.php:82
 Sylius\Bundle\ResourceBundle\Storage\SessionStorage->getSession() at /var/www/public_html/vendor/sylius/resource-bundle/src/Bundle/Storage/SessionStorage.php:62
 Sylius\Bundle\ResourceBundle\Storage\SessionStorage->set() at /var/www/public_html/vendor/sylius/sylius/src/Sylius/Component/Core/Locale/LocaleStorage.php:28
 Sylius\Component\Core\Locale\LocaleStorage->set() at /var/www/sitemap-plugin/src/Provider/ProductUrlProvider.php:139
 SitemapPlugin\Provider\ProductUrlProvider->createProductUrl() at /var/www/sitemap-plugin/src/Provider/ProductUrlProvider.php:78
 SitemapPlugin\Provider\ProductUrlProvider->generate() at /var/www/sitemap-plugin/src/Builder/SitemapBuilder.php:39
 SitemapPlugin\Builder\SitemapBuilder->build() at /var/www/sitemap-plugin/src/Command/GenerateSitemapCommand.php:84
 SitemapPlugin\Command\GenerateSitemapCommand->executeChannel() at /var/www/sitemap-plugin/src/Command/GenerateSitemapCommand.php:65
 SitemapPlugin\Command\GenerateSitemapCommand->execute() at /var/www/public_html/vendor/symfony/console/Command/Command.php:298
 Symfony\Component\Console\Command\Command->run() at /var/www/public_html/vendor/symfony/console/Application.php:1058
 Symfony\Component\Console\Application->doRunCommand() at /var/www/public_html/vendor/symfony/framework-bundle/Console/Application.php:96
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /var/www/public_html/vendor/symfony/console/Application.php:301
 Symfony\Component\Console\Application->doRun() at /var/www/public_html/vendor/symfony/framework-bundle/Console/Application.php:82
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/public_html/vendor/symfony/console/Application.php:171
 Symfony\Component\Console\Application->run() at /var/www/public_html/bin/console:38

I've tried using \Sylius\Component\Core\Locale\LocaleStorage to manually set the locale, but this is also stored in a session so it's not possible in command context.