При перегенерации схемы таблица не изменяется

Была 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-схему — вот всё как надо! Таблица нормально дропается, но потом создаётся со старыми названиями полей. Как быть? Что делать? Куда копать?
Алексей Карташов
19 августа 2013, 13:03
modx.pro
1 169
0

Комментарии: 9

Алексей Карташов
19 августа 2013, 17:32
0
Сейчас в другую таблицу этой же модели добавил пару новых полей — так вот при перегенерации так же создалась старая таблица. Новых полей нет. В первой таблице названия полей так же без изменений. А в .map файлах всё прописывается правильно — всё как в xml-схеме. Чего-то я не знаю(
    Алексей Карташов
    19 августа 2013, 19:08
    0
    Блин, даже в логах пусто :-(
    Вась, помоги, пожалуйста. Чёт совсем у меня вариантов нету.
      Василий Наумкин
      19 августа 2013, 19:11
      0
      Ну, проблема может быть только в схеме.

      Проверь, может ты редактируешь ее не там, откуда она берется для генерации? Директория разработки на сервере не подмонтирована, или что-то такое.
        Алексей Карташов
        19 августа 2013, 19:42
        0
        Но по логике, если б проблема была в схеме, то таблицы бы не создавались, а в логах были бы mysql-ошибки. Таковых не наблюдалось.
        В сгенерированных map-файлах всё прописано согласно схемы, все поля, типы, индексы. А вот сами таблицы генерируются по старому.
        Пути верные, сервер — простой шаред, в котором монтировать ничего нельзя, так что — нет, это тоже отпадает (к тому же до этого проблем не было).

        Вот сейчас полностью снёс папку с кэшем, очистил папку модели компонента, убрал из xml-схемы всё — оставил описание одной таблицы и 2х полей и перегенерировал.
        В итоге — сгенерировались xpdo-файлы этого класса, в map-ах только нужные 2 поля, в таблице — все старые 10 полей, плять. Со всеми индексами и типами.
        Да откуда он вообще берёт эти старые данные? Мистики и волшебства в таких вопросах не бывает. Но вот в каком направлении копать?
          Василий Наумкин
          19 августа 2013, 21:17
          0
          Ну, если это шаред, могу преположить только зверский кэш у mySql.

          Дальше фантазии не хватает.
            Алексей Карташов
            19 августа 2013, 21:33
            0
            Здесь какое дело…
            При выполнении
            $generator->parseSchema($xml, $Model);
            на выходе в методе parseSchema генерируются правильные map-файлы.
            Затем, при выполнении
            $manager->createObjectContainer('myClassObject');
            в этом методе есть вызов $xpdo->getFieldMeta(), а вот уже в нём набиваются мета-данные для создания таблицы. И вот там-то в массиве $this->map лежат старые мета-данные. Как они туда попадают — для меня ещё загадка.
            В removeObjectContainer() ничего сверхъестественного нет, чтобы повлиять на такой исход событий. Сейчас порою addPackage(). Может там какая веселуха происходит.
              Алексей Карташов
              19 августа 2013, 22:41
              0
              Хех, во дела…
              В общем, у меня компонент был добавлен через addExtensionPackage() и из-за этого все мета-данные брались из кэша, только совершенно не понятно из какого — папка core/cache чистилась полностью.

              В общем, сделал removeExtensionPackage() и теперь таблицы генерируются нормально
                Василий Наумкин
                20 августа 2013, 05:08
                0
                Полагаю, что из memcached или apc на сервере.

                Вот еще один минус шаредов — не знаешь, как настроено.
                  Алексей Карташов
                  20 августа 2013, 05:26
                  0
                  Возможно memcached, да. Но всё-равно — больно уж это странно.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9