Генерация схемы для разрабатываемого компонента
Всем привет!
Столкнулся с проблемой. Разрабатываю компонент на основе modExtra, все по урокам Василия. Переименовал все при помощи rename_it.php. Исправил схему, сделал build.model.php, затем build.transport.php. Далее в таблице не создаются нужные поля и появляются ошибки при построении/установке пакета.
Содержимое схемы такое:
При выполнении build.transport.php вижу такие ошибки:
Пакет устанавливается, но при установке из трех представленных полей (name, description, active) в таблице создается только поле active. Пробовал вручную удалять таблицу и переустанавливать, заново генерировать схему и прочее — безрезультатно.
Что я упустил?
Всем заранее спасибо.
Столкнулся с проблемой. Разрабатываю компонент на основе modExtra, все по урокам Василия. Переименовал все при помощи rename_it.php. Исправил схему, сделал build.model.php, затем build.transport.php. Далее в таблице не создаются нужные поля и появляются ошибки при построении/установке пакета.
Содержимое схемы такое:
<?xml version="1.0" encoding="UTF-8"?>
<model package="mspresentation" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="mspresentation"
version="1.1">
<object class="msPresentationItem" table="ms2_mspresentation_items" extends="xPDOSimpleObject">
<field key="name" dbtype="varchar" precision="100" phptype="string" null="false" default=""/>
<field key="description" dbtype="text" phptype="text" null="true" default=""/>
<field key="active" dbtype="tinyint" precision="1" phptype="boolean" null="true" default="1"/>
<index alias="name" name="name" primary="false" unique="false" type="BTREE">
<column key="name" length="" collation="A" null="false"/>
</index>
<index alias="active" name="active" primary="false" unique="false" type="BTREE">
<column key="active" length="" collation="A" null="false"/>
</index>
</object>
</model>
При выполнении build.transport.php вижу такие ошибки:
[2015-09-22 11:29:47] (INFO @ /msPresentation/_build/build.transport.php) Created table `modx_ms2_mspresentation_items`
SQL: CREATE TABLE `modx_ms2_mspresentation_items` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL DEFAULT '', `description` TEXT NULL, `active` TINYINT(1) NULL DEFAULT '1', PRIMARY KEY (`id`), INDEX `name` (`name`), INDEX `active` (`active`)) ENGINE=MyISAM
[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::removeField @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 394) Error removing field msPresentationItem->active: Array
(
[0] => 42000
[1] => 1090
[2] => You can't delete all columns with ALTER TABLE; use DROP TABLE instead
)
[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index PRIMARY to msPresentationItem: Array
(
[0] => 42000
[1] => 1072
[2] => Key column 'id' doesn't exist in table
)
[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index name to msPresentationItem: Array
(
[0] => 42000
[1] => 1072
[2] => Key column 'name' doesn't exist in table
)
[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index active to msPresentationItem: Array
(
[0] => 42000
[1] => 1061
[2] => Duplicate key name 'active'
)
[2015-09-22 11:29:50] (ERROR @ /msPresentation/_build/build.transport.php) [OnSiteRefresh][2015-09-22 11:29:50] (INFO @ /msPresentation/_build/build.transport.php) refresh_default: MinifyX
[2015-09-22 11:29:50] (ERROR @ /msPresentation/_build/build.transport.php) [OnSiteRefresh][2015-09-22 11:29:50] (INFO @ /msPresentation/_build/build.transport.php) refresh_default: pdoTools
Пакет устанавливается, но при установке из трех представленных полей (name, description, active) в таблице создается только поле active. Пробовал вручную удалять таблицу и переустанавливать, заново генерировать схему и прочее — безрезультатно.
Что я упустил?
Всем заранее спасибо.
Комментарии: 18
Это уже новый modExtra?
Да, именно в новом так делает. Была такая же история, но так как мне таблицы не нужны были, я пока отложил решение проблемы.
Сергей, я его брал два дня назад у Василия на гитхабе.
Статья эта лежит у меня в избранных, но так и не разобрался, были ли внесены эти изменения в изначальный modExtra.
Вообще, там странная штука, сейчас попробую развернуть на каком нибудь другом сервере. Тут какой-то глюк MySQL налицо, поскольку если удалить поле «active» через PHPMyAdmin, то магическим образом в MyAdmin`е становятся видны name и description. Если затем вручную добавить active, то в админке на странице компонента даже проходит создание и сохранение элемента, но в таблице элемент после этого не появляется.
Вообще, у меня это полностью стоковый modExtra, только переименованный путем rename_it.php, я просто смотрю, как он себя ведет и что умеет. Я просто удалил стоковую схему и сгенерировал через build.model.php новую, а затем попытался собрать и установить через build.transport.php. Так что сам я напортачить, вроде бы, не должен был.
Статья эта лежит у меня в избранных, но так и не разобрался, были ли внесены эти изменения в изначальный modExtra.
Вообще, там странная штука, сейчас попробую развернуть на каком нибудь другом сервере. Тут какой-то глюк MySQL налицо, поскольку если удалить поле «active» через PHPMyAdmin, то магическим образом в MyAdmin`е становятся видны name и description. Если затем вручную добавить active, то в админке на странице компонента даже проходит создание и сохранение элемента, но в таблице элемент после этого не появляется.
Вообще, у меня это полностью стоковый modExtra, только переименованный путем rename_it.php, я просто смотрю, как он себя ведет и что умеет. Я просто удалил стоковую схему и сгенерировал через build.model.php новую, а затем попытался собрать и установить через build.transport.php. Так что сам я напортачить, вроде бы, не должен был.
Попробовал на другом — совершенно та же картина. Кстати, совершенно чистый modExtra выдает те же ошибки при попытке установки «из коробки», как есть, без всяких изменений, так что не в переименовании дело.
Обнови файл resolve.tables.php
Теперь такие ошибки в консоли при установке:
Консоль запущена...
Пробуем установить пакет с подписью: modextra-1.0.0-beta
Пакет найден... сейчас идёт подготовка к его установке.
Загрузка рабочего пространства пакета...
Рабочее пространство загружено, сейчас устанавливаем пакет...
Error adding field modExtraItem->id: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->name: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->description: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->active: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index PRIMARY to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index name to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index active to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Успешно установлен пакет modextra-1.0.0-beta
suzukijk_shi_me — это название БД. Что-то тут не так…
Я уже написал, что доработал. Обнови еще разок этот файл. Извини, что тестирую на тебе, хочется побыстрее сделать.
Так это уже с обновленным там внизу.
Вот только что скопировал из репозитория минуту назад, обновил на сервере, пересобрал. Лог:
Я тоже заинтересован, так что без проблем, давай тестировать. Кстати, скайп: plintus_cat. Там будет быстрее обмениваться информацией.
Вот только что скопировал из репозитория минуту назад, обновил на сервере, пересобрал. Лог:
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping /home/s/suzukijk/shiriaev.me/public_html/modExtra-master/core/components/modextra/model/modextra/modextraitem.class.php; file already exists.
Move existing class files to regenerate them.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Model generated.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Создан новый пакет с подписью: modextra-1.0.0-beta
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Зарегистрировано пространство имён пакета: modextra
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Пространство имён «modextra» упаковано в пакет.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Created Transport Package and Namespace.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 0 System Settings.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in menu "modextra".
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Created category.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 1 snippets.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 1 chunks.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 0 plugins.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added resolver "tables" to category.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added resolver "chunks" to category.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added package attributes and setup options.
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packing up transport package zip...
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Загрузка рабочего пространства пакета...
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Рабочее пространство загружено, сейчас устанавливаем пакет...
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modAction (data object exists and cannot be upgraded); criteria: Array
(
[namespace] => modextra
[controller] => index
)
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modMenu (data object exists and cannot be upgraded); criteria: Array
(
[text] => modextra
)
[2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modChunk (data object exists and cannot be upgraded); criteria: Array
(
[name] => tpl.modExtra.item
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->id: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->name: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->description: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->active: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index PRIMARY to modExtraItem: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index name to modExtraItem: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index active to modExtraItem: Array
(
[0] => 42S02
[1] => 1146
[2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
)
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_auto_publish
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> refresh_published
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> refresh_unpublished
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_system_settings: refresh_success
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_context_settings
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> mgr: refresh_success
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> web: refresh_success
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_lexicon_topics: refresh_success
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) COMPLETED
[2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php)
Execution time: 0.1082 s
Я тоже заинтересован, так что без проблем, давай тестировать. Кстати, скайп: plintus_cat. Там будет быстрее обмениваться информацией.
Блин, к вечеру внимательность падает. Теперь все должно работать.
Обновил, пересобрал, установил. Такие ошибки:
Error removing field modExtraItem->active: Array ( [0] => 42000 [1] => 1090 [2] => You can't delete all columns with ALTER TABLE; use DROP TABLE instead )
Error adding index PRIMARY to modExtraItem: Array ( [0] => 42000 [1] => 1072 [2] => Key column 'id' doesn't exist in table )
Error adding index name to modExtraItem: Array ( [0] => 42000 [1] => 1072 [2] => Key column 'name' doesn't exist in table )
Теперь не открывается страница компонента в админке. Просто белый экран.
Давай я тебя больше мучать не буду. Сам буду собирать. Через часик вернусь и займусь.
:) Буду ждать результатов. А то я вчера весь вечер и сегодня полдня весь мозг сломал, пытаясь понять, что же я делаю не так в, казалось бы, беспроигрышном варианте :)
Обновись. Проверил, все работает.
Нет, не все :) Не создается поле id, в логе:
[2015-09-22 19:46:32] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->id: Array
(
[0] => 42000
[1] => 1075
[2] => Incorrect table definition; there can be only one auto column and it must be defined as a key
)
[2015-09-22 19:46:32] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index PRIMARY to modExtraItem: Array
(
[0] => 42000
[1] => 1072
[2] => Key column 'id' doesn't exist in table
)
Тут проблема в addField(). Он не может добавить автоинкрементный столбец. Выход — удали таблицу и пересоздай пакет или самостоятельно создай в таблице столбец id и сделай его PRIMARY. Остальные колонки создаются нормально.
Если удалить таблицу вручную и пересобрать пакет, чтобы он создал таблицу заново, — все работает! Спасибо за оперативную и неоценимую помощь, все супер! :)
Еще доработал, обнови еще разок этот файл.
То же самое:
Error adding field modExtraItem->id: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->name: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->description: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding field modExtraItem->active: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index PRIMARY to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index name to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Error adding index active to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
Пересобрал пакет и установил его.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.