[РЕШЕНО] Проблема с апгрейдом privatemsg

Главные вкладки

Аватар пользователя FORTIS FORTIS 18 октября 2009 в 15:24

Здравствуйте, очень нужна ваша помощь.

Обновил сайт с 5 на 6ую версию друпала, но модуль privatemsg обновить корректно так и не удалось. Пробовал обновлять с последней версии под пятёрку, это privatemsg 3.0 на последнюю dev для шестёрки, на RC2 где было заявлено об апгрейде, на RC4 - везде возникали ошибки и переписки пользователей не переносились в новую версию.

Обновить до конца, без ошибок, удалось лишь на пропатченную версию которую мне дали в иссуях на друпал.орг, но после апгрейда у пользователей пропали все переписки, а их важно сохранить. Причем в новой таблице pm_messages они есть.

Для начала хочу спросить:
Сталкивались ли вы с апгрейдом этого модуля?
С какой на какую версию обновляли?
Сохранялись ли переписки пользователей?
На вскидку, сколько было приватных сообщений всего? У меня их чуть больше 67 000, таблица с ними весит 58 метров.

Позже допишу сюда ошибки которые возникали при обновлении, может быть сможете помочь...

Комментарии

Аватар пользователя FORTIS FORTIS 20 октября 2009 в 17:37

С горем пополам сделал апгрейд, удалось сохранить сообщения.

Апгрейдил друпал 5.20 -> 6.10 потом privatemsg 5.x-3.0 -> privatemsg 6.x-1.0 RC4.
Сначала выскочила ошибка в функции 6000 на шаге, где создается и наполняется temp_pm_index - посмотрел в базу - наполнилась до конца, удалил этот кусок в функции 6000 и повторил обновление - опять ошибка на следующем шаге, причем в dblog никаких записей, и судя по базе этот шаг обновления выполнился до конца - тоже вырезал его и продолжил обновление, и так до конца Smile

Аватар пользователя FORTIS FORTIS 26 октября 2009 в 18:59

ёмоё, всётаки апгрейд был неудачным, скопировались первые 65 тысяч (из 67) но и среди них есть пропавшие безвести!

вот есть такой код в .install файле модуля:

  if (db_table_exists('privatemsg')) {
    $data = db_query("SELECT * FROM {privatemsg}");
    while ($result = db_fetch_array($data)) {
      if ($result['thread'] == 0) {
        $result['thread_id'] = $result['id'];
      }
      else{
        $result['thread_id'] = 0;
      }
      if ($result['author'] <> $result['recipient']) {
        db_query("INSERT INTO {pm_message} (mid, author, subject, body, timestamp) VALUES ( %d, %d, '%s', '%s', %d )", $result['id'], $result['author'], $result['subject'], $result['message'], $result['timestamp']);
        db_query("INSERT INTO {temp_pm_index} (mid, thread, folder, thread_id, uid, is_new, deleted) VALUES ( %d, %d, %d, %d, %d, %d, %d )", $result['id'], $result['thread'], $result['folder'], $result['thread_id'], $result['recipient'], $result['newmsg'], $result['recipient_del']);
      }
      db_query("INSERT INTO {temp_pm_index} (mid, thread, folder, thread_id, uid, is_new, deleted) VALUES ( %d, %d, %d, %d, %d, %d, %d )", $result['id'], $result['thread'], 0, $result['thread_id'], $result['author'], 0, $result['author_del']);
    }
  }

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

Важно сохранить все переписки Sad

Аватар пользователя FORTIS FORTIS 30 октября 2009 в 1:37

ёмоё, сорь Smile

видимо дело в сервере, слишком большая таблица и вываливало ошибку 500 в дблог. ну она зелененькая была потому и не обратил внимания :]

изначально был сбит с толку ошибками, которые были результатом того, что бекап базы делался без перевода сайта в режим обслуживания. самооправдан ^^)

Все решилось, обновил на локалхосте... обновление минут 10 шло Smile