Описанная ниже методика предназначена для заливки пустого сайта на Drupal. Задача доливки контента на сайт, где уже что-то есть - не ставилась.
Более того, на стадии импорта комментариев все старые комментарии точно будут стерты.
Если вам нужно пополнение имеющегося сайта, то описанные ниже скрипты нужно взять за основу и допилить.
Кроме того, никакими enterprise-features, вроде транзакций или обработки ошибок я категорически не заморачивался. Предполагается, какбэ, что импортом данных
мы занимаемся тихо в уголочке, поступлением новых данных на старый сайт можем управлять, а после завершения импорта просто подменим сайт на скаку.
Импорт записей
Задача: вытащить записи (посты) из БД MovableType и запихать их в БД Drupal в виде объектов типа Story. Создание Drupal-объекта связано с заполнением
нескольких таблиц (node, node_revisions и прочие node_*, url_aliases), пополнением таблицы тегов, другими словами эту работу не хочется делать вручную
(SQL-запросами), а хочется перевесить на внутреннюю механику Drupal (ведь при создании записи оно как-то само все делается...).
План работ тривиален и прост:
Ставим модули Table Wizard и Migrate.
Добавляем нужные поля в структуру данных записи Story (не вручную, включением готовых модулей).
Запускаем скрипт, который перенесет нам данные постов в БД Drupal.
Импортируем образованную таблицу с постами в Table Wizard.
Первый пункт особых вопросов вызвать не должен, обычные модули. За собой потянут Views и Schema, их тоже надо выкачать и поставить,
до кучи полезен и Views UI.
В качестве короткой заметки на тему вчерашнего и ряда следующих текстов.
Для Drupal есть модуль Pathauto, который делает человеко понятные урлы: заменяет пробелы на минусы (или подчеркивания), меняет ужасные /taxonomy/term/NNN на /tags/имя-тега и так далее.
Все из себя настраиваемое и вообще хорошее, если бы не одно но:
Оно умеет транслитерацию (в частности, URL данного текста странслировался бы в ...i_transliteratsiya.....
Оно умеет формировать URL-ы из кучи макросов (дата, рубрика и все такое), этого богатства более чем хватает для жизни.
Но! Включение транслитерации - глобальное. Или мы транслитерируем все (URL заметок, теги и т.п.) или не транслитерируем ничего.
А у меня в блоге принято, что теги русские, а URL заметок - латинские.
Если в паттерн для формирования URL включить текст 'no-transliterate-me', то данный текст будет удален, а то что осталось - не будет транслитерировано.
Все очень на скорую руку, только для таксономии (тегов), но там по образу и подобию несложно доточить для других типов - муторно, но можно.
К сожалению, модуль написан достаточно плотно, транслитерация делается на очень ранней стадии, поэтому сделать более удобные макросы по месту [notr-macro] и [macro] - сходу не получилось.
Автор слышал о проблеме и справедливо замечает, что и размножение макросов и отдельные настройки для каждого типа данных - плохо. И я с ним согласен, но вот мне - надо,
Я понимаю, что читать такой сугубо специфический текст может быть скучно, особенно на каникулах. В то же время, я не нашел разумных русскоязычных текстов на эту тему, поэтому мои записки могут оказаться полезными тем, кто столкнется с подобной задачей.
Короче, не нравится - не читайте :)
Статус этих записок
Записки пишутся по горячему, с небольшой задержкой относительно реальных действий. На момент написания первой части (которую вы сейчас читаете) есть ощущение, что все получится, но реальный перенос данных даже на тестовой машине сделан частично. Но уже есть ощущение успеха, минимально необходимая функциональность точно будет, а дальше будем посмотреть.
Зачем переезжать
Моя причина очень простая: мне надоело поддерживать две платформы (Drupal и Movable Type). При этом, по комплексу свойств Друпал побеждает, а значит с MT пора прощаться. А новогодние каникулы - хороший повод позаниматься чем-то полезным.
Мучал ATI Radeon HD5870 и NVidia GTX280 в одной машине на предмет взаимной поддержки OpenCL. Поддерживают. С оговорками, но жить можно. Написал на эту тему небольшой текст:
There are known performance issues for HD4XXX series of cards on OpenCL and there is currently no plan to focus exclusively on improving performance for that family. The HD4XXX series was not designed for OpenCL whereas the HD5XXX series was. There will be performance improvements on this series because of improvements in the HD5XXX series, so it will get better, but it is not our focus.
For example, if you are using local memory, they are all currently emulated in global memory. So it is possible you are going out to main memory twice as often as you do on NVidia. This can cause a fairly large performance hit if the application is memory bound. On the HD5XXX series, local memory is mapped to hardware local and thus is many times faster than the HD4XXX series.
Короче, слушайте вашу группу валенки. Формально OpenCL на HD4xxx поддержан, а фактически нужно совершенно другой kernel писать, который локальную память не использует.
А 48xx - важный кусок рынка, их много навыпускали и формально они совсем неплохие. Теперь и в этом сорте не скажу чего придется разбираться. Хорошо хоть про 2xxx/3xxx просто рекомендовано забыть.
P.S. Сравнивая два SDK, видно что ATI в области GPGPU очень заметно отстает (disclaimer: это лично мое мнение по результатам одного дня изучения :). Речь именно о качестве SDK: документации, примерах и тому подобных вещах.
ЕГЭ, говорите? В 2000-м году? А сколько лет этот текст мариновался, прежде чем на анекдот попал?
Ну ладно, бабушку-профессора развели, дали текст с анекдота.ру, сказали что coчинeниe о Лeнинe, написанное в рамках ЕГЭ в Волгограде, но не о бабушке речь.
zroot on / (zfs, local)
zroot/home on /home (zfs, local)
zroot/tmp on /tmp (zfs, local, nosuid)
zroot/usr on /usr (zfs, local)
..... и еще с десяток томов под разные нужды....
3 диска, RAIDZ1, 4 терабайта места, "домашний роутер".
Но пришлось раз 10 подойти к снаряду на виртуальной машине, прежде чем многочисленные мелкие грабли оказались обнаружены.
В частности, расширять root pool нельзя, поэтому идея-фикс по переносу данных без многократного переписывания данных не проканала. А была она такая:
Было два двухтерабайтника в зеркале, место кончилось, купил третий.
Разбиваем зеркало, из двух дисков (один старый, один новый) делаем RAIDZ1, переписываем туда данные.
Добавляем второй старый диск в тот же RAID.
Увы, пришлось вылить на внешние диски, собрать массив, налить обратно....
По органолептическим ощущениям, диски сильно меньше нагружены, чем в gmirror, отчего меньше греются. Какой-то статистики наберу за неделю, расскажу....
Не, естественно наземка, самолеты так медленно не летают. А почему наземка? А потому:
Xpresspost (EMS) не возит в Россию.
Авиапочта - возит, но не страхует. А отправитель очень хотел страховки: Россия, медведи на улицах, балалайки, водка.
Судя по трекингу, посылка жалких 20 дней просто лежала на складе, потом 40 дней плыла морем, потом еще за 2 дня ехала в Москву (из Питера, наверное), а дальше все как обычно.
Список того, чего надо остерегаться на почтовых просторах - пополнен.
Второй день собираю Qt 4.6-RC при помощи VS2008, с каким-то очень переменным успехом:
Если собирать Qt SDK, то ломается при сборке вебкита, moc генерирует файл нулевого размера. Ошибка висит в Qt-шном багтрекере со статусом "не удалось воспроизвести", гугление показало что она бывала и на Qt 4.5.2, хотя у меня 4.5.2 собирался без проблем.
При сборке варианта без Qtcreator наблюдался целый ворох странных проблем, тот же moc.exe создавался без прав на исполнение. По десятому разу вроде полегчало и конкретный WebKit вроде собрался без ручных пинков (с пинками, т.е. подменяя файл длины на нормальный - получалось и в первом случае, но неаккуратненько).
Одновременно узнал про jom, на 4-ядерном процессоре ошибки компиляции возникают вчетверо быстрее, ура!
Я вот как подумаю, сколько сил стоит поддержка Qt на всем чудовищном мировом зоопарке, так мне сразу хочется год эдак в 85-й.
На неделю позже, чем обещал, но я добил этот текст!
После успешной установки Snow Leopard на PC я оказался завален почтой,
общая суть которой сводилась к тому, что Prasys пишет не очень понятно, да и английского не розумию, напиши пожалуйста
на русском (если честно, то после чтения Хакинтошных форумов у меня тоже временами складывается впечатление, что я тоже не понимаю английского).
Рекламируемый мной Empire EFI необычайно удобен, если все работает. Впрочем, судя по
чехарде версий на сайте автора (за 2 недели с 1.00 до 1.07R2), да и по моему опыту, оно работает далеко не всегда.
Одна из наиболее частых проблем связана, к несчастью, именно с DVD-приводами. Современные чипсеты Intel не содержат старого (параллельного)
контроллера ATA (PATA), интерфейс к старым DVD, дискам и т.п. делается контроллерами третьих фирм (чаще всего JMicron). В этом месте начинается
секс с драйверами (kext, kernel extension), таймаутами, настройками и т.п.
Описанный ниже способ установки с USB-флэшки не использует DVD. Помимо этого, метод обладает рядом других достоинств:
Ставится быстрее. Большинство современных флэшек гораздо быстрее оптических приводов, особенно по скорости позиционирования.
Модификация загрузочных блоков, расширений и т.п. не требует перезаписи CD/DVD, а значит экспериментировать можно быстро.
Правда для изготовления загрузочной USB-флэшки нам потребуется работающая Mac OS. При реальной установке я все манипуляции делал на настоящем Маке,
но при подготовке данного текста повторил это упражнение в Snow Leopard, установленном в виртуальной машине.