cms
cms copied to clipboard
[3.x]: Internal Server Error in Frontend until PHPSESSID cookie gets cleared
What happened?
Description
Our customer gets an internal server error from his Craft Site wenn accessing certain pages in the Frontend (but not all). It's a multisite setup, where the main domain is concertvienna.com and some language variants of the website have their base url defined as subdirectory, like concertvienna.com/de or concertvienna.com/fr. The problem happens e.g. with the page https://www.concertvienna.com/fr/concerts-vienne which is served from a structure.
The important part: The problem goes away when we delete the cookie PHPSESSID.
BUT: we had a rather similar error before with the same client, which was reported and solved here, although in this case it happened in the backend: https://github.com/craftcms/cms/issues/10342
Steps to reproduce
- It's not really possible to reproduce the error, but we can confirm that it happens with our customer, we cross checked it and also checked that deleting this cookies solves the issue.
Expected behavior
No Internal Server Error :-)
Craft CMS version
Craft Pro 3.7.28
PHP version
7.4.29
Operating system and version
Ubuntu 20.04.4 LTS
Database type and version
MySQL 8.0.29
Image driver and version
Imagick 3.6.0 (ImageMagick 6.9.10-23)
Installed plugins and versions
The important part: The problem goes away when we delete the cookie PHPSESSID.
Unless you've changed https://craftcms.com/docs/4.x/config/config-settings.html#phpsessionname, then that's not a Craft-managed PHP session cookie - some other code must be setting it, so I'd probably start by investigate that. Craft's is called CraftSessionId by default.
FWIW, if I try to load https://www.concertvienna.com/fr/concerts-vienne, I don't get a 500 Internal Server Error, I just get a timeout after 60 seconds.
If you are getting a 500 ISE, then the underlying error message will be in either Craft's logs or your web server's error logs (depending on where it originated from). Finding that should help you debug as well.
Sorry, my fault that I did not look into the logs, this should have been obvious: I will provide that as soon as it happens again, please keep the issue open.
Regarding the timeout: We had server maintenance, and the server was not running while you checked it.
Hi Brad, we have the problem again and it seems to be related to Commerce. This is from the logs:
2022-06-13 11:03:52 [-][1532][t5gein0313vku11a2ivtkathcg][error][yii\base\InvalidConfigException] yii\base\InvalidConfigException: Variant is missing its product in /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/elements/Variant.php:424
Stack trace:
#0 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/elements/Variant.php(1039): craft\commerce\elements\Variant->getProduct()
#1 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/services/Purchasables.php(110): craft\commerce\elements\Variant->getIsAvailable()
#2 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/models/LineItem.php(637): craft\commerce\services\Purchasables->isPurchasableAvailable()
#3 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/elements/Order.php(1765): craft\commerce\models\LineItem->refreshFromPurchasable()
#4 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/elements/Order.php(1914): craft\commerce\elements\Order->recalculate()
#5 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/services/Elements.php(2699): craft\commerce\elements\Order->afterSave()
#6 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/services/Elements.php(783): craft\services\Elements->_saveElementInternal()
#7 /data/www/k005253/web/concertvienna.com/vendor/craftcms/commerce/src/services/Carts.php(118): craft\services\Elements->saveElement()
#8 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/base/Component.php(139): craft\commerce\services\Carts->getCart()
#9 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/helpers/Template.php(90): yii\base\Component->__get()
#10 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/a1/a12ff4bbe323fb17a047ab19b322a5914a6367e261ba2e69452fdbe1223f5500.php(182): craft\helpers\Template::attribute()
#11 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(182): __TwigTemplate_a09aef360c7fee9142798d7486701a1650d2128df02318927ffafae8931fd5b0->block_listBody()
#12 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/a1/a12ff4bbe323fb17a047ab19b322a5914a6367e261ba2e69452fdbe1223f5500.php(46): Twig\Template->displayBlock()
#13 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(405): __TwigTemplate_a09aef360c7fee9142798d7486701a1650d2128df02318927ffafae8931fd5b0->doDisplay()
#14 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling()
#15 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/cf/cfae12cbd49d377df9aa988d7ef2a686b159eebb9d2b44740a248cae43f504c3.php(160): Twig\Template->display()
#16 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(405): __TwigTemplate_61b52f5cd258a269e12ca1ecf6be224c311d998f9fafcc96dae384b516ad5e26->doDisplay()
#17 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling()
#18 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/46/465be95050239211e09996e30ae39f54f408ea2617acfd8d8a5f4bc0354c89b8.php(140): Twig\Template->display()
#19 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(182): __TwigTemplate_c289b9f3e057410e70e413594075e8b0c5a561a9ba05cf4a03b95da979e695d2->block_main()
#20 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(254): Twig\Template->displayBlock()
#21 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/47/47ca82f609991106548287572d99949fbeae069f2c984116cb2cfdf65d9c242a.php(101): Twig\Template->renderBlock()
#22 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(405): __TwigTemplate_c8fcf1898465969770d420c5a3c17ace803cd1ed48c7216af87750251f7bd8be->doDisplay()
#23 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling()
#24 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/d9/d9212a91ead2a6e4c1fef0b8d1c1259a9f521c62df8da7df1a6c7741d33ff6cc.php(54): Twig\Template->display()
#25 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(182): __TwigTemplate_8a8e2b6c8a9c642ac837a99502a36cbcbfc5158eacb1da3187cd7336d2f9cfc0->block_content()
#26 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/b8/b8bb3a4cdabc0f44caeab07d68bd4ec833cfdc2f04ba34ed29a09c93e5d03b2d.php(180): Twig\Template->displayBlock()
#27 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(405): __TwigTemplate_053f72a63bca5f7cb1313e33cade95e054d83259a41b0decbe9315e406de071a->doDisplay()
#28 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling()
#29 /data/www/k005253/web/concertvienna.com/storage/runtime/compiled_templates/d9/d9212a91ead2a6e4c1fef0b8d1c1259a9f521c62df8da7df1a6c7741d33ff6cc.php(43): Twig\Template->display()
#30 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(405): __TwigTemplate_8a8e2b6c8a9c642ac837a99502a36cbcbfc5158eacb1da3187cd7336d2f9cfc0->doDisplay()
#31 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(378): Twig\Template->displayWithErrorHandling()
#32 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Template.php(390): Twig\Template->display()
#33 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/TemplateWrapper.php(45): Twig\Template->render()
#34 /data/www/k005253/web/concertvienna.com/vendor/twig/twig/src/Environment.php(318): Twig\TemplateWrapper->render()
#35 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/web/View.php(408): Twig\Environment->render()
#36 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/web/View.php(461): craft\web\View->renderTemplate()
#37 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/web/Controller.php(201): craft\web\View->renderPageTemplate()
#38 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/controllers/TemplatesController.php(102): craft\web\Controller->renderTemplate()
#39 [internal function]: craft\controllers\TemplatesController->actionRender()
#40 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array()
#41 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams()
#42 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/base/Module.php(552): yii\base\Controller->runAction()
#43 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/web/Application.php(287): yii\base\Module->runAction()
#44 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/web/Application.php(103): craft\web\Application->runAction()
#45 /data/www/k005253/web/concertvienna.com/vendor/craftcms/cms/src/web/Application.php(272): yii\web\Application->handleRequest()
#46 /data/www/k005253/web/concertvienna.com/vendor/yiisoft/yii2/base/Application.php(384): craft\web\Application->handleRequest()
#47 /data/www/k005253/web/concertvienna.com/web/index.php(19): yii\base\Application->run()
#48 {main}
2022-06-13 11:03:52 [-][1532][t5gein0313vku11a2ivtkathcg][info][application] $_GET = [
'p' => 'de/konzerte-wien'
]
The problem
- only occurs on the clients browser (Chrome) and
- NOT if opened in an anonymous window or
- if the PHPSESSID cookie gets deleted.
- It also does not occur with any other computer (e.g. mine) when accessing the same URL.
@angrybrad Hey Brad, please put this ticket on hold. We found variants without products (which is what the error log is complaining about) so we need to find out, where this comes from.
Hi Brad, although we did not find out the logical connection with the Cookie, we DID find out why we have variants without products.
They exist because we delete products from the database and the related variants do not get deleted by the DB trigger (on Postgres), but they are set to NULL. Is this expected behavior? Why would one want to have variants without products assigned?
Thanks, Matthias
@hiasl That is intentional because otherwise, variants table rows would get deleted when a product is hard-deleted, but their elements, content, etc. table rows would be left behind. So they need to be explicitly deleted after a product is deleted, rather than left to foreign key cascade deletes.
I’ve just PR’d a change to Commerce, so any orphaned variants will be deleted during garbage collection (craftcms/commerce/pull/2897), which should mostly resolve this going forward.
Thank you!