cms icon indicating copy to clipboard operation
cms copied to clipboard

[3.x]: Internal Server Error in Frontend until PHPSESSID cookie gets cleared

Open hiasl opened this issue 3 years ago • 6 comments

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

  1. 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

Bildschirmfoto 2022-06-09 um 16 25 31

hiasl avatar Jun 09 '22 14:06 hiasl

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.

angrybrad avatar Jun 09 '22 22:06 angrybrad

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.

hiasl avatar Jun 10 '22 04:06 hiasl

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.

hiasl avatar Jun 13 '22 09:06 hiasl

@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.

hiasl avatar Jun 20 '22 10:06 hiasl

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 avatar Jul 18 '22 10:07 hiasl

@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.

brandonkelly avatar Jul 18 '22 15:07 brandonkelly

Thank you!

hiasl avatar Aug 21 '22 20:08 hiasl