Magento 2.4.2 - Установка и решение проблем
Решил установить и поиграться с последней Magento 2.4.2-p1. Скачал официальную сборку magento-ee-2.4.2-p1_sample_data-2021-04-21-10-14-41.zip с портала партнеров и принялся устанавливать. В процессе, столкнулся с рядом ошибок. О их решении и пойдет речь..
Началось все с напоминания того, что фронтового инсталятора больше нет, поэтому все делаем через боль консоль.
Вспоминать все параметры инсталла не хотелось, поэтому сходил в DevDocs и нашел инструкцию по установке
- https://devdocs.magento.com/guides/v2.4/install-gde/composer.html
подправил под себя и попробовал запустить
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
bin/magento setup:install \ --base-url=http://m242.sv \ --db-host=localhost \ --db-name=m242 \ --db-user=mysql \ --db-password=mysql \ --admin-firstname=Admin \ --admin-lastname=Admin \ --admin-email=admin@admin.com \ --admin-user=admin \ --admin-password="admin123" \ --language=en_AU \ --currency=AUD \ --timezone=Australia/Sydney \ --use-rewrites=1 |
Получил ошибку, о том, что PHP 7.2 уже не подходит. Сходил, обновил знания по совместимости версий
- https://devdocs.magento.com/guides/v2.4/install-gde/system-requirements.html
Пришлось установить php7.4 и перенастроить хост. Попробовал снова, и на этот раз оказалось что у меня не установлено расширение soap. Вот оказывается кому он нужен в 21 году 🙂
Опять же в DevDocs нашел список нужны модулей, правда для CentOs. Но не проблема, конвертировал в убунту версии
1 2 3 4 5 6 |
sudo apt-get install php7.4-fpm php7.4-cli php7.4-pdo \ php7.4-mysqlnd php7.4-opcache php7.4-xml php7.4-gd \ php7.4-mysql php7.4-intl php7.4-mbstring php7.4-bcmath \ php7.4-json php7.4-iconv php7.4-soap |
Подтюнинговал немного команду установки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ php7.4 bin/magento setup:install \ --base-url=http://m242.sv \ --db-host=localhost \ --db-name=m242 \ --db-user=mysql \ --db-password=mysql \ --admin-firstname=Admin \ --admin-lastname=Admin \ --admin-email=admin@admin.com \ --admin-user=admin \ --admin-password="admin123" \ --language=en_AU \ --currency=AUD \ --timezone=Australia/Sydney \ --use-rewrites=1 \ --session-save=files |
Следующий запуск уже был получше, но выдало ошибку о том, что не может создать структуру в Elastic-е.
Установил Elastic: Ubuntu: Как установить Elasticsearch 7 для Magento 2.4
После установки натолкнулся на ошибку "magento2_product_1_v2/document/_mapping contains unrecognized parameter"
1 2 3 4 5 |
In Connection.php line 632: {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/magento2_product_1_v2/document/_mapping] contains unrecognized parameter: [include_type_name] "}],"type":"illegal_argument_exception","reason":"request [/magento2_product_1_v2/document/_mapping] contains unrecognized parameter: [include_type_name]"},"status":400} |
Оказалось, что у меня висел докер с проброшеным на машину портом 9200, а в нем был Elastic 5.x, и запросы улетали туда, вместо свежеустановленного 7.x. Просто потушил докер и смог продолжить.
Подтюнинговал еще немного команду установки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$ php7.4 bin/magento setup:install \ --base-url=http://m242.sv \ --db-host=localhost \ --db-name=m242 \ --db-user=mysql \ --db-password=mysql \ --admin-firstname=Admin \ --admin-lastname=Admin \ --admin-email=admin@admin.com \ --admin-user=admin \ --admin-password="admin123" \ --language=en_AU \ --currency=AUD \ --timezone=Australia/Sydney \ --use-rewrites=1 \ --session-save=files \ --search-engine=elasticsearch7 \ --elasticsearch-host=localhost \ --elasticsearch-port=9200 |
Далее, столкнулся с ошибкой
1 2 3 4 5 6 7 8 9 |
In PatchApplier.php line 170: Unable to apply data patch Magento\CatalogRuleSampleData\Setup\Patch\Data\InstallCatalogRuleSampleData for module Magento_CatalogRuleSampleData. Original exception message: Rolled back transaction has not been completed correctly. In Mysql.php line 321: Rolled back transaction has not been completed correctly. |
Я вспомнил, что я разработчик и хотя мне было лень, все равно пришлось подебажить. Оказалось, что во время импорта сейлс рулов, происходит exception внутри транзакции, что приводит к Rollback-у при коммите транзакции MySQL
Трейс ошибки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Mysql.php:335, Magento\Framework\DB\Adapter\Pdo\Mysql\Interceptor->rollBack() Interceptor.php:58, Magento\Framework\DB\Adapter\Pdo\Mysql\Interceptor->___callParent() Interceptor.php:138, Magento\Framework\DB\Adapter\Pdo\Mysql\Interceptor->Magento\Framework\Interception\{closure:public_html/vendor/magento/framework/Interception/Interceptor.php:104-151}() Interceptor.php:153, Magento\Framework\DB\Adapter\Pdo\Mysql\Interceptor->___callPlugins() Interceptor.php:41, Magento\Framework\DB\Adapter\Pdo\Mysql\Interceptor->rollBack() Create.php:148, Magento\Staging\Model\Operation\Create->execute() EntityManager.php:96, Magento\Framework\EntityManager\EntityManager->save() Rule.php:382, Magento\SalesRule\Model\ResourceModel\Rule->save() AbstractModel.php:655, Magento\SalesRule\Model\Rule\Interceptor->save() Interceptor.php:58, Magento\SalesRule\Model\Rule\Interceptor->___callParent() Interceptor.php:138, Magento\SalesRule\Model\Rule\Interceptor->Magento\Framework\Interception\{closure:public_html/vendor/magento/framework/Interception/Interceptor.php:104-151}() Rule.php:48, Magento\AdvancedSalesRule\Model\Plugin\Rule->aroundSave() Interceptor.php:135, Magento\SalesRule\Model\Rule\Interceptor->Magento\Framework\Interception\{closure:public_html/vendor/magento/framework/Interception/Interceptor.php:104-151}() Interceptor.php:153, Magento\SalesRule\Model\Rule\Interceptor->___callPlugins() Interceptor.php:563, Magento\SalesRule\Model\Rule\Interceptor->save() Rule.php:106, Magento\SalesRuleSampleData\Model\Rule->install() Installer.php:30, Magento\SalesRuleSampleData\Setup\Installer->install() State.php:187, call_user_func_array:{public_html/vendor/magento/framework/App/State.php:187}() State.php:187, Magento\Framework\App\State\Interceptor->emulateAreaCode() Interceptor.php:68, Magento\Framework\App\State\Interceptor->emulateAreaCode() Executor.php:54, Magento\Framework\Setup\SampleData\Executor->exec() InstallSalesRuleSampleData.php:47, Magento\SalesRuleSampleData\Setup\Patch\Data\InstallSalesRuleSampleData->apply() PatchApplier.php:162, Magento\Framework\Setup\Patch\PatchApplier->applyDataPatch() Installer.php:1094, Magento\Setup\Model\Installer->handleDBSchemaData() Installer.php:960, Magento\Setup\Model\Installer->installDataFixtures() Installer.php:389, call_user_func_array:{public_html/setup/src/Magento/Setup/Model/Installer.php:389}() Installer.php:389, Magento\Setup\Model\Installer->install() InstallCommand.php:231, Magento\Setup\Console\Command\InstallCommand->execute() Command.php:255, Magento\Setup\Console\Command\InstallCommand->run() Application.php:1009, Magento\Framework\Console\Cli->doRunCommand() Application.php:273, Magento\Framework\Console\Cli->doRun() Cli.php:115, Magento\Framework\Console\Cli->doRun() Application.php:149, Magento\Framework\Console\Cli->run() magento:23, {main}() |
Проблему можно увидеть тут
1 2 3 4 5 6 7 |
vendor/magento/module-sales-rule/Model/ResourceModel/Rule.php [method: save] vendor/magento/module-staging/Model/Operation/Create.php [method: execute] vendor/magento/framework/EntityManager/Observer/BeforeEntitySave.php [method: execute] vendor/magento/module-rule/Model/AbstractModel.php [method: beforeSave] vendor/magento/module-rule/Model/AbstractModel.php [method: getConditions] |
Проблема оказалась в фикстурах, проблемные данные можно отловить тут
- vendor/magento/module-sales-rule-sample-data/Model/Rule.php [method: install]
- vendor/magento/module-catalog-rule-sample-data/Model/Rule.php [method: install]
добавив пару проверок
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
.... $row['conditions_serialized'] = $this->catalogRule->convertSerializedData($row['conditions_serialized']); $row['actions_serialized'] = $this->catalogRule->convertSerializedData($row['actions_serialized']); if (!json_decode($row['conditions_serialized'])) { $debug = 1; // тут ставим точку останова } if (!json_decode($row['actions_serialized'])) { $debug = 1; // тут ставим точку останова } .... |
сами фикстуры с данными находятся тут
- /vendor/magento/module-catalog-rule-sample-data/fixtures/catalog_rules.csv
- vendor/magento/module-sales-rule-sample-data/fixtures/sales_rules.csv
внутри них есть какие-то переменные, которые должны меняться на значения, но этого не происходит, т.к. функция json_decode не может раскодировать значение полей conditions_serialized и actions_serialized.
Проблемные места в файлах можно найти по тексту "value":%url_key
Я руками подправил два этих файла, чтобы они начали работать, вот они
После этого проблема ушла, но появилась другая: SQLSTATE [42502]: Base table or view not found: 1146 Table design_config_grid_flat doesn't exist, query was: DELETE FROM design_config_grid_flat
1 2 3 4 5 6 7 8 9 10 |
In Mysql.php line 599: SQLSTATE [42S02]: Base table or view not found: 1146 Table `design_config_grid_flat` doesn't exist, query was: DELETE FROM `design_config_grid_flat` In Mysql.php line 110: SQLSTATE [42S02]: Base table or view not found: 1146 Table `design_config_grid_flat` doesn't exist, query was: DELETE FROM `design_config_grid_flat` In Mysql.php line 92: SQLSTATE [42S02]: Base table or view not found: 1146 Table `design_config_grid_flat` doesn't exist |
Такую ошибку я встречал ранее, и обычно на существующих установках ее решают реиндексом. Но, у нас же она случилось посреди импорта данных, на шаге 1395 из 1846.
Я не стал разбираться и просто создал таблицу до запуска инсталла, предварительно удалив в базе все что было.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
CREATE TABLE `design_config_grid_flat` ( `entity_id` int(10) unsigned NOT NULL COMMENT 'Entity ID', `store_website_id` int(11) DEFAULT NULL COMMENT 'Store_website_id', `store_group_id` int(11) DEFAULT NULL COMMENT 'Store_group_id', `store_id` int(11) DEFAULT NULL COMMENT 'Store_id', `theme_theme_id` varchar(255) DEFAULT NULL COMMENT 'Theme_theme_id', PRIMARY KEY (`entity_id`), KEY `DESIGN_CONFIG_GRID_FLAT_STORE_WEBSITE_ID` (`store_website_id`), KEY `DESIGN_CONFIG_GRID_FLAT_STORE_GROUP_ID` (`store_group_id`), KEY `DESIGN_CONFIG_GRID_FLAT_STORE_ID` (`store_id`), FULLTEXT KEY `DESIGN_CONFIG_GRID_FLAT_THEME_THEME_ID` (`theme_theme_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='design_config_grid_flat'; |
После этого, установщик отработал до конца, но все равно с ошибками о SampleData
1 2 3 4 5 6 7 8 |
... [Progress: 1846 / 1846] [SUCCESS]: Magento installation complete. [SUCCESS]: Magento Admin URI: /admin Sample Data is installed with errors. See log file for details Nothing to import. |
Я заглянул в логи и увидел следующее
- var/log/system.log
1 2 3 4 |
[2021-07-01 17:15:43] report.ERROR: Sample Data error: Notice: Undefined offset: 7 in vendor/magento/module-catalog-rule-sample-data/Model/Rule.php on line 105 [] [] [2021-07-01 17:16:16] report.ERROR: Sample Data error: Notice: Undefined offset: 15 in vendor/magento/module-sales-rule-sample-data/Model/Rule.php on line 90 [] [] |
по всей видимости, все же нужно еще разбираться с тем, что там в фикстурах.
Желания у меня не было, поэтому я решил, что пока и так сойдет, лишь бы запустилось.
Фронтенд заработал
Я попробовал войти в админку и система попыталась скинуть мне данные для авторизации по 2FA, но тк sendmail не настроен ничего у нее не получилось
Mailsend мне пока не нужен, поэтому просто отключил модуль
1 2 3 4 5 |
php bin/magento module:disable Magento_TwoFactorAuth php bin/magento setup:di:compile php bin/magento cache:clean |
После этого я смог попасть в админку
К сожалению за всеми этими манипуляциями время быстро пролетело и на игры внутри его не осталось, отложим на другой раз 🙂
Author: | Tags: /
| Rating:
Leave a Reply