craftcms / commerce

Fully integrated ecommerce for Craft CMS.
https://craftcms.com/commerce
Other
215 stars 169 forks source link

[5.x]: Migration m230215_114552_migrate_shipping_rule_conditions_to_condition_builder fails in Craft 5 upgrade #3448

Closed turnstylerj closed 3 months ago

turnstylerj commented 3 months ago

What happened?

Description

When updating from Craft 4 to 5, the m230215_114552_migrate_shipping_rule_conditions_to_condition_builder migration fails with the following error:

*** applying m230215_114552_migrate_shipping_rule_conditions_to_condition_builder
Exception: craft\commerce\services\Stores::getStoreById(): Argument #1 ($id) must be of type int, null given, called in /var/www/html/vendor/craftcms/commerce/src/base/StoreTrait.php on line 28 (/var/www/html/vendor/craftcms/commerce/src/services/Stores.php:168)
#0 /var/www/html/vendor/craftcms/commerce/src/base/StoreTrait.php(28): craft\commerce\services\Stores->getStoreById(NULL)
#1 /var/www/html/vendor/craftcms/commerce/src/elements/conditions/orders/OrderCurrencyValuesAttributeConditionRule.php(64): craft\commerce\elements\conditions\orders\ShippingRuleOrderCondition->getStore()
#2 /var/www/html/vendor/yiisoft/yii2/base/Component.php(180): craft\commerce\elements\conditions\orders\OrderCurrencyValuesAttributeConditionRule->setCondition(Object(craft\commerce\elements\conditions\orders\ShippingRuleOrderCondition))
#3 /var/www/html/vendor/yiisoft/yii2/base/Model.php(742): yii\base\Component->__set('condition', Object(craft\commerce\elements\conditions\orders\ShippingRuleOrderCondition))
#4 /var/www/html/vendor/craftcms/cms/src/base/Model.php(220): yii\base\Model->setAttributes(Array, true)
#5 /var/www/html/vendor/craftcms/cms/src/fields/conditions/MoneyFieldConditionRule.php(41): craft\base\Model->setAttributes(Array, true)
#6 /var/www/html/vendor/yiisoft/yii2/base/Component.php(180): craft\fields\conditions\MoneyFieldConditionRule->setAttributes(Array)
#7 /var/www/html/vendor/yiisoft/yii2/BaseYii.php(558): yii\base\Component->__set('attributes', Array)
#8 /var/www/html/vendor/yiisoft/yii2/base/BaseObject.php(107): yii\BaseYii::configure(Object(craft\commerce\elements\conditions\orders\ItemSubtotalConditionRule), Array)
#9 /var/www/html/vendor/craftcms/cms/src/base/Model.php(78): yii\base\BaseObject->__construct(Array)
#10 /var/www/html/vendor/craftcms/commerce/src/elements/conditions/orders/OrderCurrencyValuesAttributeConditionRule.php(53): craft\base\Model->__construct(Array)
#11 [internal function]: craft\commerce\elements\conditions\orders\OrderCurrencyValuesAttributeConditionRule->__construct(Array)
#12 /var/www/html/vendor/yiisoft/yii2/di/Container.php(419): ReflectionClass->newInstanceArgs(Array)
#13 /var/www/html/vendor/yiisoft/yii2/di/Container.php(170): yii\di\Container->build('craft\\commerce\\...', Array, Array)
#14 /var/www/html/vendor/yiisoft/yii2/BaseYii.php(365): yii\di\Container->get('craft\\commerce\\...', Array, Array)
#15 /var/www/html/vendor/craftcms/cms/src/Craft.php(70): yii\BaseYii::createObject(Array, Array)
#16 /var/www/html/vendor/craftcms/cms/src/services/Conditions.php(123): Craft::createObject(Array)
#17 /var/www/html/vendor/craftcms/cms/src/base/conditions/BaseCondition.php(112): craft\services\Conditions->createConditionRule(Array)
#18 /var/www/html/vendor/craftcms/cms/src/base/conditions/BaseCondition.php(128): craft\base\conditions\BaseCondition->createConditionRule(Array)
#19 [internal function]: craft\base\conditions\BaseCondition->craft\base\conditions\{closure}('craft\\commerce\\...', 'craft\\commerce\\...')
#20 /var/www/html/vendor/illuminate/collections/Arr.php(600): array_map(Object(Closure), Array, Array)
#21 /var/www/html/vendor/illuminate/collections/Collection.php(777): Illuminate\Support\Arr::map(Array, Object(Closure))
#22 /var/www/html/vendor/craftcms/cms/src/base/conditions/BaseCondition.php(128): Illuminate\Support\Collection->map(Object(Closure))
#23 /var/www/html/vendor/craftcms/cms/src/base/conditions/BaseCondition.php(229): craft\base\conditions\BaseCondition->getSelectableConditionRules()
#24 /var/www/html/vendor/craftcms/cms/src/base/conditions/BaseCondition.php(204): craft\base\conditions\BaseCondition->validateConditionRule(Object(craft\commerce\elements\conditions\orders\ShippingAddressZoneConditionRule))
#25 /var/www/html/vendor/craftcms/commerce/src/migrations/m230215_114552_migrate_shipping_rule_conditions_to_condition_builder.php(75): craft\base\conditions\BaseCondition->addConditionRule(Object(craft\commerce\elements\conditions\orders\ShippingAddressZoneConditionRule))
#26 /var/www/html/vendor/craftcms/cms/src/db/Migration.php(49): craft\commerce\migrations\m230215_114552_migrate_shipping_rule_conditions_to_condition_builder->safeUp()
#27 /var/www/html/vendor/yiisoft/yii2/console/controllers/BaseMigrateController.php(758): craft\db\Migration->up()
#28 /var/www/html/vendor/craftcms/cms/src/console/controllers/MigrateController.php(365): yii\console\controllers\BaseMigrateController->migrateUp('m230215_114552_...')
#29 [internal function]: craft\console\controllers\MigrateController->actionAll()
#30 /var/www/html/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#31 /var/www/html/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams(Array)
#32 /var/www/html/vendor/yiisoft/yii2/console/Controller.php(180): yii\base\Controller->runAction('all', Array)
#33 /var/www/html/vendor/craftcms/cms/src/console/ControllerTrait.php(89): yii\console\Controller->runAction('all', Array)
#34 /var/www/html/vendor/yiisoft/yii2/base/Module.php(552): craft\console\controllers\MigrateController->runAction('all', Array)
#35 /var/www/html/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('migrate/all', Array)
#36 /var/www/html/vendor/craftcms/cms/src/console/Application.php(91): yii\console\Application->runAction('migrate/all', Array)
#37 /var/www/html/vendor/yiisoft/yii2/base/Controller.php(212): craft\console\Application->runAction('migrate/all', Array)
#38 /var/www/html/vendor/craftcms/cms/src/console/Controller.php(207): yii\base\Controller->run('migrate/all', Array)
#39 /var/www/html/vendor/craftcms/cms/src/console/controllers/UpController.php(60): craft\console\Controller->run('migrate/all', Array)
#40 [internal function]: craft\console\controllers\UpController->actionIndex()
#41 /var/www/html/vendor/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#42 /var/www/html/vendor/yiisoft/yii2/base/Controller.php(178): yii\base\InlineAction->runWithParams(Array)
#43 /var/www/html/vendor/yiisoft/yii2/console/Controller.php(180): yii\base\Controller->runAction('', Array)
#44 /var/www/html/vendor/craftcms/cms/src/console/ControllerTrait.php(89): yii\console\Controller->runAction('', Array)
#45 /var/www/html/vendor/craftcms/cms/src/console/Controller.php(216): craft\console\Controller->traitRunAction('', Array)
#46 /var/www/html/vendor/yiisoft/yii2/base/Module.php(552): craft\console\Controller->runAction('', Array)
#47 /var/www/html/vendor/yiisoft/yii2/console/Application.php(180): yii\base\Module->runAction('up', Array)
#48 /var/www/html/vendor/craftcms/cms/src/console/Application.php(91): yii\console\Application->runAction('up', Array)
#49 /var/www/html/vendor/yiisoft/yii2/console/Application.php(147): craft\console\Application->runAction('up', Array)
#50 /var/www/html/vendor/craftcms/cms/src/console/Application.php(122): yii\console\Application->handleRequest(Object(craft\console\Request))
#51 /var/www/html/vendor/yiisoft/yii2/base/Application.php(384): craft\console\Application->handleRequest(Object(craft\console\Request))
#52 /var/www/html/craft(13): yii\base\Application->run()
#53 {main}
*** failed to apply m230215_114552_migrate_shipping_rule_conditions_to_condition_builder (time: 0.009s)

I've sent a pre-update db backup to support@craftcms.com.

Craft CMS version

5.0.2

Craft Commerce version

5.0.0-beta.2

PHP version

8.2

Operating system and version

Linux 6.5.0-15-generic

Database type and version

MySQL 8.0.33

Image driver and version

Imagick 3.7.0 (ImageMagick 6.9.11-60)

Installed plugins and versions

"craftcms/ckeditor": "4.0.3", "craftcms/commerce": "5.0.0-beta.2", "craftcms/commerce-paypal-checkout": "3.0.0", "craftcms/commerce-stripe": "5.0.0", "craftpulse/craft-colour-swatches": "5.0.0", "doublesecretagency/craft-cpcss": "3.0.0", "mmikkel/retcon": "3.0.0", "nystudio107/craft-imageoptimize": "5.0.0-beta.2", "nystudio107/craft-retour": "5.0.0-beta.5", "nystudio107/craft-seomatic": "5.0.0-beta.8", "putyourlightson/craft-sprig": "3.0.0-beta.2", "servd/craft-asset-storage": "4.0.2", "spicyweb/craft-neo": "5.0.0-beta.4", "verbb/field-manager": "4.0.0-beta.1", "verbb/image-resizer": "4.0.0-beta.1", "vlucas/phpdotenv": "^5.4.0"

linear[bot] commented 3 months ago

PT-1591 [5.x]:

MatthiasBrodelet commented 3 months ago

+1

nfourtythree commented 3 months ago

Hi @turnstylerj

Thank you for raising this with us. We have pushed a fix which will be included in the next beta release of Commerce.

To get this early, change your craftcms/commerce requirement in your project's composer.json to:

"require": {
  "craftcms/commerce": "dev-feature/pt-1591-5x-migration#4bba3a409232928ae2680bd5c23e841aa165a32a as 5.0.0-beta.2",
  "...": "..."
}

Then run composer update.

Thanks!

brandonkelly commented 3 months ago

Commerce 5.0.0-beta.3 is out with that fix. Thanks again @turnstylerj!

engram-design commented 1 month ago

Still getting this on a fresh, brand-new Commerce 5.0.7 install. Not a Craft 4 upgrade, have even uninstalled and re-installed.

I'm not actually getting it when installing Commerce, but when I install the soon-to-be-released Postie 5. I'm not even performing an update to Postie, it's a brand-new install.

Looking at the stack trace, I can't actually tell why it's throwing this error. The fix seems related to shipping rules, but Postie doesn't store anything in the database about this.

screencapture-craft5-alpha-test-admin-settings-plugins-2024-05-26-22_33_53

engram-design commented 1 month ago

Ah, looks like this is the issue, and the order status needs to be assigned a store. Sorry for the noise!