console-jedi icon indicating copy to clipboard operation
console-jedi copied to clipboard

Ошибка запуска приложения при отсутствии таблиц битрикса

Open senor-artemisio opened this issue 8 years ago • 6 comments

Если таблицы битрикса еще не созданы, то приложение запустить невозможно:

$ ./bin/jedi 

                                                              
  [Bitrix\Main\DB\SqlQueryException]                          
  Mysql query error: Table 'empty_db.b_option' doesn't exist  

Конкретная проблема вызванная таким поведением - невозможность создать команду запускающую создание этих таблиц, т.к. без этих таблиц команда не запускается. Получается замкнутый круг.

Также при интеграции приложения с phinx и запуска применения миграций - невозможно создать миграцию создающую начальные таблицы битрикса по той же причине - приложение не запускается.

senor-artemisio avatar Jan 17 '17 15:01 senor-artemisio

создание битрикса должно быть ./bin/symfony/console install:bitrix можно даже в установщик jedy добавить создание линка jedy конкретно в установке битрикса мало чем полезен ну и коносльные команды бывают нередко полезны без инициализации битрикса

matiaspub avatar Jan 17 '17 16:01 matiaspub

Все команды джедая (почти все) завязаны на API битрикса. Оно, как ни крути, без своих таблиц в базе не заведется.

Как вариант, можно сделать импорт начального дампа частью env:init. И да, неплохо было бы подключать ядро только при исполнении команд — наследников класса BitrixCommand.

@matiaspub,

jedy конкретно в установке битрикса мало чем полезен

Могу сделать команду для скачивания и установки битрикса.

nook-ru avatar Jan 17 '17 16:01 nook-ru

@nook-ru

Могу сделать команду для скачивания и установки битрикса.

не понял, но ведь в jedy - идеологически неправильно ее хранить, да и что такой установщик может взять от jedy? еще не установленное ядро Битрикс?

matiaspub avatar Jan 17 '17 16:01 matiaspub

@matiaspub

не понял, но ведь в jedy - идеологически неправильно ее хранить

Не обязательно как часть jedi, хотя лично мне не хочется рассматривать его исключительно как инструмент для CI.

nook-ru avatar Jan 17 '17 16:01 nook-ru

У меня была аналогичная проблема, но я решил ее созданием команды, которая отвязана от ядра.

Создаем класс, наследник от \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?

mmjurov avatar Jan 17 '17 18:01 mmjurov

Поправка. Заметил, что работает это только в том случае, если в dbconn стоит следующая опция

define("DELAY_DB_CONNECT", true);

Судя по всему она откладывает подключение к БД "на потом", и подключается к БД в момент первого к ней обращения через API. В моем случае это помогло (на машине, на которой я запускаю джедая даже mysql нет)

mmjurov avatar Jan 17 '17 20:01 mmjurov