При перегенерации схемы таблица не изменяется
        Была xml-схема с рабочей моделью и таблицами.
Затем меня чёрт дернул поменять названия пары полей, везде в коде всё изменил/поправил на новые названия, потом поправил схему.
Перегенерирую схему вот этим вот кодом:
И вот, блин, незадача — поля во вновь создаваемой таблице остаются со старыми названиями!
Что за фигня? Я удалял все файлы модели, чистил кэш, перепроверял xml-схему — вот всё как надо! Таблица нормально дропается, но потом создаётся со старыми названиями полей. Как быть? Что делать? Куда копать?
    
    
                                                                                
            Затем меня чёрт дернул поменять названия пары полей, везде в коде всё изменил/поправил на новые названия, потом поправил схему.
Перегенерирую схему вот этим вот кодом:
<?php
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))).'/index.php';
/*******************************************************/
$package = 'ms2discount'; // Class name for generation
$suffix = 'ms2discount_'; // Suffix of tables.
$prefix = $modx->config['table_prefix']; // table prefix
// Folders for schema and model
$Model = dirname(__FILE__).'/model/';
$Schema = dirname(__FILE__).'/model/schema/';
$xml = $Schema.$package.'.mysql.schema.xml';
// Remove old files
rrmdir($Model.$package .'/mysql');
//unlink($xml);
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$modx->error->message = null;
$modx->loadClass('transport.modPackageBuilder', '', false, true);
$manager = $modx->getManager();
$generator = $manager->getGenerator();
$generator->parseSchema($xml, $Model);
$modx->addPackage($package, $Model);
$manager->removeObjectContainer('myClassObject');
$manager->createObjectContainer('myClassObject');
print "\nDone\n";
function rrmdir($dir) {
	if (is_dir($dir)) {
		$objects = scandir($dir);
		foreach ($objects as $object) {
			if ($object != "." && $object != "..") {
				if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object);
				else unlink($dir."/".$object);
			}
		}
		reset($objects);
		rmdir($dir);
	}
}(это код из генерации схемы из minishop2, т.е. рабочий)И вот, блин, незадача — поля во вновь создаваемой таблице остаются со старыми названиями!
Что за фигня? Я удалял все файлы модели, чистил кэш, перепроверял xml-схему — вот всё как надо! Таблица нормально дропается, но потом создаётся со старыми названиями полей. Как быть? Что делать? Куда копать?
Комментарии: 9
                Сейчас в другую таблицу этой же модели добавил пару новых полей — так вот при перегенерации так же создалась старая таблица. Новых полей нет. В первой таблице названия полей так же без изменений. А в .map файлах всё прописывается правильно — всё как в xml-схеме. Чего-то я не знаю(            
                    
                Блин, даже в логах пусто :-(
Вась, помоги, пожалуйста. Чёт совсем у меня вариантов нету.
                    Вась, помоги, пожалуйста. Чёт совсем у меня вариантов нету.
                Ну, проблема может быть только в схеме.
Проверь, может ты редактируешь ее не там, откуда она берется для генерации? Директория разработки на сервере не подмонтирована, или что-то такое.
                    Проверь, может ты редактируешь ее не там, откуда она берется для генерации? Директория разработки на сервере не подмонтирована, или что-то такое.
                Но по логике, если б проблема была в схеме, то таблицы бы не создавались, а в логах были бы mysql-ошибки. Таковых не наблюдалось.
В сгенерированных map-файлах всё прописано согласно схемы, все поля, типы, индексы. А вот сами таблицы генерируются по старому.
Пути верные, сервер — простой шаред, в котором монтировать ничего нельзя, так что — нет, это тоже отпадает (к тому же до этого проблем не было).
Вот сейчас полностью снёс папку с кэшем, очистил папку модели компонента, убрал из xml-схемы всё — оставил описание одной таблицы и 2х полей и перегенерировал.
В итоге — сгенерировались xpdo-файлы этого класса, в map-ах только нужные 2 поля, в таблице — все старые 10 полей, плять. Со всеми индексами и типами.
Да откуда он вообще берёт эти старые данные? Мистики и волшебства в таких вопросах не бывает. Но вот в каком направлении копать?
            
                    В сгенерированных map-файлах всё прописано согласно схемы, все поля, типы, индексы. А вот сами таблицы генерируются по старому.
Пути верные, сервер — простой шаред, в котором монтировать ничего нельзя, так что — нет, это тоже отпадает (к тому же до этого проблем не было).
Вот сейчас полностью снёс папку с кэшем, очистил папку модели компонента, убрал из xml-схемы всё — оставил описание одной таблицы и 2х полей и перегенерировал.
В итоге — сгенерировались xpdo-файлы этого класса, в map-ах только нужные 2 поля, в таблице — все старые 10 полей, плять. Со всеми индексами и типами.
Да откуда он вообще берёт эти старые данные? Мистики и волшебства в таких вопросах не бывает. Но вот в каком направлении копать?
                Ну, если это шаред, могу преположить только зверский кэш у mySql.
Дальше фантазии не хватает.
                    Дальше фантазии не хватает.
                Здесь какое дело…
При выполнении
Затем, при выполнении
В removeObjectContainer() ничего сверхъестественного нет, чтобы повлиять на такой исход событий. Сейчас порою addPackage(). Может там какая веселуха происходит.
                    При выполнении
$generator->parseSchema($xml, $Model);на выходе в методе parseSchema генерируются правильные map-файлы.Затем, при выполнении
$manager->createObjectContainer('myClassObject');в этом методе есть вызов $xpdo->getFieldMeta(), а вот уже в нём набиваются мета-данные для создания таблицы. И вот там-то в массиве $this->map лежат старые мета-данные. Как они туда попадают — для меня ещё загадка.В removeObjectContainer() ничего сверхъестественного нет, чтобы повлиять на такой исход событий. Сейчас порою addPackage(). Может там какая веселуха происходит.
                Хех, во дела…
В общем, у меня компонент был добавлен через addExtensionPackage() и из-за этого все мета-данные брались из кэша, только совершенно не понятно из какого — папка core/cache чистилась полностью.
В общем, сделал removeExtensionPackage() и теперь таблицы генерируются нормально
                    В общем, у меня компонент был добавлен через addExtensionPackage() и из-за этого все мета-данные брались из кэша, только совершенно не понятно из какого — папка core/cache чистилась полностью.
В общем, сделал removeExtensionPackage() и теперь таблицы генерируются нормально
                Полагаю, что из memcached или apc на сервере.
Вот еще один минус шаредов — не знаешь, как настроено.
                    Вот еще один минус шаредов — не знаешь, как настроено.
                Возможно memcached, да. Но всё-равно — больно уж это странно.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.