console-jedi
console-jedi copied to clipboard
Ошибка запуска приложения при отсутствии таблиц битрикса
Если таблицы битрикса еще не созданы, то приложение запустить невозможно:
$ ./bin/jedi
[Bitrix\Main\DB\SqlQueryException]
Mysql query error: Table 'empty_db.b_option' doesn't exist
Конкретная проблема вызванная таким поведением - невозможность создать команду запускающую создание этих таблиц, т.к. без этих таблиц команда не запускается. Получается замкнутый круг.
Также при интеграции приложения с phinx и запуска применения миграций - невозможно создать миграцию создающую начальные таблицы битрикса по той же причине - приложение не запускается.
создание битрикса должно быть ./bin/symfony/console install:bitrix можно даже в установщик jedy добавить создание линка jedy конкретно в установке битрикса мало чем полезен ну и коносльные команды бывают нередко полезны без инициализации битрикса
Все команды джедая (почти все) завязаны на API
битрикса. Оно, как ни крути, без своих таблиц в базе не заведется.
Как вариант, можно сделать импорт начального дампа частью env:init
. И да, неплохо было бы подключать ядро только при исполнении команд — наследников класса BitrixCommand
.
@matiaspub,
jedy конкретно в установке битрикса мало чем полезен
Могу сделать команду для скачивания и установки битрикса.
@nook-ru
Могу сделать команду для скачивания и установки битрикса.
не понял, но ведь в jedy - идеологически неправильно ее хранить, да и что такой установщик может взять от jedy? еще не установленное ядро Битрикс?
@matiaspub
не понял, но ведь в jedy - идеологически неправильно ее хранить
Не обязательно как часть jedi
, хотя лично мне не хочется рассматривать его исключительно как инструмент для CI
.
У меня была аналогичная проблема, но я решил ее созданием команды, которая отвязана от ядра.
Создаем класс, наследник от \Symfony\Component\Console\Command\Command
, или любого другого его предка, но не \Notamedia\ConsoleJedi\Application\Command\BitrixCommand
. В принципе подойдет \Notamedia\ConsoleJedi\Application\Command\Command
В .jedi.php добавляем свою команду с помощью ключа commands
:
return [
'web-dir' => 'htdocs',
'env-dir' => 'environments',
'useModules' => true,
'commands' => [new MySuperMigrationCommand()] // тут можно зафигачить любой массив с любыми командами
];
В итоге эта команда сможет запускаться без необходимости подключать ядро, с помощью нее и можно будет реализовать восстановление нужных таблиц.
Или это wrong way?
Поправка. Заметил, что работает это только в том случае, если в dbconn стоит следующая опция
define("DELAY_DB_CONNECT", true);
Судя по всему она откладывает подключение к БД "на потом", и подключается к БД в момент первого к ней обращения через API. В моем случае это помогло (на машине, на которой я запускаю джедая даже mysql нет)