Magento 2: Can't run this operation: deployment configuration is absent
Столкнулся с ошибкой "Can't run this operation: deployment configuration is absent" в Magento 2 при попытке выполнить "php bin/magento setup:upgrade" ..
Проект вытянут с гита, файл app/etc/env.php создан и заполнен, но ничего не работает.
Запускаю
1 2 3 |
php bin/magento setup:upgrade |
получаю
1 2 3 |
Can't run this operation: deployment configuration is absent. Run 'magento setup:config:set --help' for options. |
Окей, беру опции вот отсюда и запускаю генерацию конфига
1 2 3 4 5 6 7 8 9 |
$ php bin/magento setup:config:set \ > --backend-frontname="admin" \ > --db-host="localhost" \ > --db-name="magento2" \ > --db-user="mysql" \ > --db-password="mysql" \ > --session-save="redis" |
получаю
1 2 3 |
You saved the new configuration. |
Повторяю команду setup:upgrade, опять та же ошибка.. Ок, чем разбираться что не так, проще глянуть код, открываю
1 2 3 |
/setup/src/Magento/Setup/Model/Installer.php |
вижу это
1 2 3 4 5 6 7 8 9 |
$config = $this->deploymentConfig->get(ConfigOptionsListConstants::KEY_MODULES); if (!$config) { throw new \Magento\Setup\Exception( "Can't run this operation: deployment configuration is absent." . " Run 'magento setup:config:set --help' for options." ); } |
смотрю, что за класс у объекта $this->deploymentConfig, оказывается это
1 2 3 |
\Magento\Framework\App\DeploymentConfig |
так же смотрю константу ConfigOptionsListConstants::KEY_MODULES, она равна "modules"
смотри его метод get
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/** * Gets data from flattened data * * @param string $key * @param mixed $defaultValue * @return mixed|null */ public function get($key = null, $defaultValue = null) { $this->load(); if ($key === null) { return $this->flatData; } return isset($this->flatData[$key]) ? $this->flatData[$key] : $defaultValue; } |
похоже что в flatData нет нашего ключа modules, делаю print_r($this->flatData) - да это именно так.
Пробую выполнить
1 2 3 |
php bin/magento setup:di:compile |
получаю ошибку
1 2 3 4 |
You cannot run this command because modules are not enabled. You can enable modules by running the 'module:enable --all' command. |
Выполняю
1 2 3 |
php bin/magento module:enable --all |
получаю сообщение что все модули включены
1 2 3 4 5 6 7 8 9 10 11 12 |
The following modules have been enabled: - Magento_Store - Magento_Directory - Magento_Theme - Magento_Eav ... To make sure that the enabled modules are properly registered, run 'setup:upgrade'. Cache cleared successfully. Generated classes cleared successfully. Please run the 'setup:di:compile' command to generate classes. Info: Some modules might require static view files to be cleared. To do this, run 'module:enable' with the --clear-static-content option to clear them. |
Выполняю снова
1 2 3 |
php bin/magento setup:di:compile |
получаю целую кучу ошибок
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Compilation was started. Repositories code generation... 1/7 [====>-----------------------] 14% < 1 sec 88.5 MiB PHP Fatal error: Declaration of Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region::getAllOptions() must be compatible with Magento\Eav\Model\Entity\Attribute\Source\Table::getAllOptions($withEmpty = true, $defaultValues = false) in /vendor/magento/module-customer/Model/ResourceModel/Address/Attribute/Source/Region.php on line 14 |
тут все просто, сигнатуры методов не совпадают, правим вручную добавляя указанные сигнатуры. Перезапускаем, опять правим, так все 100500 файлов.
Далее получаю ошибку
1 2 3 4 5 |
[Exception] Warning: Use of undefined constant MCRYPT_BLOWFISH - assumed 'MCRYPT_BLOWFISH' (this will throw an Error in a future version of PHP) in /setup/src/Magento/Setup/Module/Di/Code/Scanner/PhpScanner.php on line 56 |
Исправляю, устанавливая mcrypt в свой PHP 7.2
Наконец-то получаю, сообщение что все выполнилось
1 2 3 4 5 6 7 |
$ php bin/magento setup:di:compile Compilation was started. Interception cache generation... 7/7 [============================] 100% 51 secs 506.0 MiB Generated code and dependency injection configuration successfully. |
запускаю опять
1 2 3 |
php bin/magento setup:upgrade |
получаю ошибку
1 2 3 4 5 |
Recoverable Error: ini_set(): Cannot set 'user' save handler by ini_set() or session_module_name() in /vendor/magento/framework/Session/SessionManager.php on line 570 |
Смотрим код этого файла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * Performs ini_set for all of the config options so they can be read by session_start * * @return void */ private function initIniOptions() { foreach ($this->sessionConfig->getOptions() as $option => $value) { $result = ini_set($option, $value); if ($result === false) { $error = error_get_last(); throw new \InvalidArgumentException( sprintf('Failed to set ini option "%s" to value "%s". %s', $option, $value, $error['message']) ); } } } |
Можно просто вырезать установку именно этой переменной, но сперва гуглим и видим, что ошибка возникает когда сессии сохраняются в Redis-е
1 2 3 4 |
Recoverable Error: session_module_name(): Cannot set 'user' save handler by ini_set() or session_module_name() in app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 82 Happens when storing session in DB or in Redis trough Cm_RedisSession |
Переключаем место хранения сессий на файлы
1 2 3 |
php bin/magento setup:config:set --session-save="files" |
запускаем снова
1 2 3 |
php bin/magento setup:upgrade |
на этот раз другая ошибка
1 2 3 4 |
Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in /vendor/magento/framework/Session/SessionManager.php on line 129 |
опять смотрим код, видим
1 2 3 4 5 6 7 8 9 10 |
public function __construct( ... ) { ... // Enable session.use_only_cookies ini_set('session.use_only_cookies', '1'); $this->start(); } |
ок, надоело, это простой Warning, просто глушим его вот так
1 2 3 4 5 6 7 8 9 10 |
public function __construct( ... ) { ... // Enable session.use_only_cookies @ini_set('session.use_only_cookies', '1'); $this->start(); } |
запускаем снова
1 2 3 |
php bin/magento setup:upgrade |
на этот раз все начинает работать, но все равно падает с ошибкой
1 2 3 4 5 6 |
.. Running data recurring... Warning: count(): Parameter must be an array or an object that implements Countable in /vendor/magento/framework/View/Design/Theme/ThemeList.php on line 237 |
по указаному адресу видим такой код
1 2 3 4 5 6 7 |
protected function _prepareConfigurationData($themePackage) { ... $parentPathPieces = $themeConfig->getParentTheme(); if (count($parentPathPieces) == 1) { |
в count попадает не верный тип, смотрим getParentTheme(), видим следующее
1 2 3 4 5 6 7 8 9 10 |
public function getParentTheme() { $parentTheme = $this->_data['parent']; if (!$parentTheme) { return null; } return explode(self::THEME_PATH_SEPARATOR, $parentTheme); } |
все понятно, возвращается null отсюда и ошибка, правим
1 2 3 4 5 6 |
protected function _prepareConfigurationData($themePackage) { ... if ( parentPathPieces && count($parentPathPieces) == 1 ) { |
запускаем снова
1 2 3 |
php bin/magento setup:upgrade |
На этот раз получаем то, что ожидали
1 2 3 4 |
Processing configurations data from configuration file... System config was processed |
На этом мои приключения не закончились, на фронте я получил
1 2 3 4 5 6 7 8 |
Exception #0 (Magento\Framework\Exception\LocalizedException): Please update your modules: Run "composer install" from the Magento root directory. The following modules are outdated: Magento_Cron db schema version: defined in codebase - 2.0.0, currently installed - 2.0.0.1 Magento_Cron db data version: defined in codebase - 2.0.0, currently installed - 2.0.0.1 Vendor_AbstractEntityData db schema version: defined in codebase - 1.1.9, currently installed - 1.2.0 Vendor_AbstractEntityData db data version: defined in codebase - 1.1.9, currently installed - 1.2.0 |
Author: | Tags: /
| Rating:
Leave a Reply