Гид по технологиям

Как мигрировать с Trac на Redmine

6 min read Миграция Обновлено 21 Nov 2025
Миграция с Trac на Redmine — подробное руководство
Миграция с Trac на Redmine — подробное руководство

Важно: перед началом отключите Trac, чтобы пользователи не вносили изменения во время миграции.

Цели статьи и варианты запроса

  • Основная цель: перенести проекты из Trac в Redmine с минимальной потерей данных.
  • Варианты запросов: миграция Trac в Redmine, перенос тикетов Trac в Redmine, миграция SVN и тикетов, импорт timelog Trac в Redmine.

1. Резервное копирование данных Trac

Перед любыми операциями сделайте полную резервную копию файлов и базы данных Trac.

ssh oldtracserver  
cd /var/lib/  
tar -czf trac.tar.gz trac  
scp /var/lib/trac.tar.gz newredmineserver:/tmp/

Примечание: убедитесь, что резервная копия хранится на отдельном хосте или в защищённом каталоге.

2. Установка Redmine на новом сервере

Установка обычно простая, но standalone-сервер требует дополнительных прав доступа:

aptitude install redmine  
cd /usr/share/redmine/  
mkdir tmp  
chown -R www-data:www-data tmp/  
mkdir log  
touch log/production.log  
chown -R www-data:www-data log/  
# Running the standalone server  
sudo -u www-data X_DEBIAN_SITEID="default" ruby script/server webrick -e production -b newredmineserverip

После запуска откройте http://newredmineserver:3000 и убедитесь, что страница Redmine отображается.

3. Установка и использование тестовой (development) среды

Рекомендую сначала выполнять миграцию в тестовой среде — так вы избежите ошибок в production и сможете отладить процесс.

Откройте конфигурацию базы данных:

vi /etc/redmine/default/database.yml

Пример конфигурации для development:

development:
adapter: sqlite3
database: /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default-dev
encoding: utf8

Команды для запуска тестовой среды:

cd /usr/share/redmine  
rake db:migrate RAILS_ENV="development"   
rake redmine:load_default_data RAILS_ENV="development"   
touch log/development.log  
chown -R www-data:www-data log/  
chown www-data:www-data /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default-dev  
sudo -u www-data X_DEBIAN_SITEID="default" ruby script/server webrick -e development -b newredmineserverip -p 3001

После этого вы сможете безопасно тестировать импорт и исправлять скрипты.

4. Очистка тестовой среды Redmine

Если тестовая БД испорчена, быстро восстановите чистую инсталляцию:

rm /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default*  
rm /var/lib/redmine/default/files/*  
cd /usr/share/redmine  
rake db:migrate RAILS_ENV="production"   
rake db:migrate RAILS_ENV="development"   
rake redmine:load_default_data RAILS_ENV="development"   
rake redmine:load_default_data RAILS_ENV="production"   
chown www-data:www-data /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default*

5. Миграция базы данных Trac в Redmine

Автор этого руководства использовал модифицированный скрипт миграции, который расширяет стандартный импорт Redmine и импортирует больше данных из Trac:

Ключевые улучшения скрипта:

  • Перенос изменений свойств тикетов: смена владельца (re-assignment), компонента (категории), приоритета, заголовка, типа задачи, процента выполнения.
  • Заполнение done_ratio через отображение resolution -> ratio (пример):
RATIO_MAPPING = {'' => 0,  
'fixed' => 100,  
'invalid' => 0,  
'wontfix' => 0,  
'duplicate' => 100,  
'worksforme' => 0}
  • Обработка поля CC как добавление наблюдателей (watchers).
  • Добавление даты начала (по дате первого комментария) и даты завершения (когда done_ratio=100%) для календаря и диаграмм Ганта.
  • Перенос записей учёта времени (timelog) из плагина timeandestimation: фактически затраченные часы и ссылки в комментариях на номера тикетов.
  • Добавление отдельного трекера задач с корректным workflow и маппингом из Trac.
  • Включение всех модулей Redmine по умолчанию (для простоты).

Исправления и хаки в скрипте:

  • Добавление автора тикета в список репортёров проекта.
  • Корректное время обновления тикета.
  • Хитрый хак: принудительная смена типа custom field ‘billable’ на чекбокс (правильное решение — парсить trac.ini).

Скрипт (migrate_from_trac.rake) и патч для trunk доступны в публичном SVN/репозитории автора. После размещения скрипта выполните:

rake redmine:migrate_from_trac RAILS_ENV="production"   
WARNING: a new project will be added to Redmine during this process.  
Are you sure you want to continue ? [y/N] y  
Trac directory []: /tmp/trac/mytracproject  
Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite3]:   
Trac database encoding [UTF-8]:   
Target project identifier []: myredmineproject  
# Repeat for all projects  
rake redmine:migrate_from_trac RAILS_ENV="development"  
# Repeat for dev environment

Замечание: timelog-комментарии по умолчанию не обрабатываются Textile и отображаются как plain text. Чтобы текстиль отображался, можно применить соответствующий патч для Redmine:

cd /usr/share/redmine  
wget "http://www.redmine.org/attachments/download/2807/textilize-timelog-entry-comment_r3084.patch"   
patch -p0 < textilize-timelog-entry-comment_r3084.patch

6. Миграция SVN

Если вы переносите также SVN-репозитории, используйте проверенный поток: дампы на старом сервере, перенос архивов и загрузка в новый репозиторий.

6.1. Резервная копия SVN на старом хосте

ssh oldsvnserver  
cd /var/lib/svn/repository  
for project in *; do svnadmin dump ${project} | gzip > ${project}.gz ; done  
scp *.gz newsvnserver:/tmp/

6.2. Импорт на новом хосте

svnadmin create project1  
zcat project1.gz | svnadmin load project1

7. Привязка Redmine к SVN и правки логов коммитов

Если в ваших сообщениях коммитов использовались ссылки типа “See #” или “Fix #”, настройте Redmine для распознавания таких ключевых слов: Администрирование -> Настройки -> Репозиторий (Administration -> Settings -> Repository).

7.1. Добавление pre-revprop-change hook для разрешения модификаций свойств ревизий

cd /var/lib/svn/  
vi pre-revprop-change

Вставьте:

#!/bin/sh
exit 0

И создайте символические ссылки в hooks каждого репозитория:

ln -s /var/lib/svn/pre-revprop-change project1/hooks/  
ln -s /var/lib/svn/pre-revprop-change project2/hooks/  
...  
ln -s /var/lib/svn/pre-revprop-change projectn/hooks/

7.2. Модификация логов SVN для замены ссылок на Trac

rake redmine:migrate_from_trac_svn RAILS_ENV="production"   
WARNING: all commit messages with references to trac pages will be modified  
Are you sure you want to continue ? [y/N] y    
Subversion repository url []: file:///var/lib/svn/project1  
Subversion repository username []:   
Subversion repository password []:   
Redmine project identifier []: myredmineproject  
# Repeat for all projects  
rm */hooks/pre-revprop-change

7.3. Настройка репозиториев в интерфейсе проекта

Перейдите в проект -> Настройки -> Репозиторий и добавьте URL репозитория и параметры доступа.

Скриншот страницы настроек репозитория проекта в Redmine

7.4. Синхронизация Redmine с SVN (fetch changesets)

Сначала сгенерируйте ключ в Администрирование -> Настройки -> Репозиторий, затем запустите массовую загрузку:

wget "http://newredmineserver:3000/sys/fetch_changesets?key=8qKxftrhICYt8bPEShVa"

8. Обновление до Redmine 1.0.5

Версия Squeeze уязвима на момент 21.04.2011 — обновите пакеты из backports:

aptitude -t squeeze-backports install redmine redmine-sqlite

9. Заключение и типичные проблемы

Большая часть проекта автоматически переносится скриптом. Оставшиеся проблемы обычно вызваны «грязными» или плохо отформатированными данными в Trac (например, сломанный HTML в вики-страницах). Такие страницы нужно править вручную.

Дополнения: методология миграции и практические рекомендации

Методология (мини): подготовка, тест, миграция, проверка, откат

  1. Подготовка: резервные копии (Trac DB, Trac файлы, SVN дампы), уведомление пользователей.
  2. Тест: разверните Redmine dev, прогоните полную миграцию на копиях. Исправьте скрипт и повторите.
  3. Миграция: выполните миграцию в production в заранее согласованное окно обслуживания. Отключите Trac и заморозьте коммиты.
  4. Проверка: прогон smoke-тестов, сверка числа тикетов, комментариев, timelog.
  5. Откат: если критично — восстановите Trac из резервной копии, откатите созданные проекты в Redmine и повторите процесс.

Роли и чек-листы

Администратор Redmine:

  • Сделать бэкапы Trac и SVN.
  • Установить Redmine и зависимости.
  • Запустить скрипт миграции и мониторить лог.
  • Настроить права и интеграцию с LDAP/SMTP при необходимости.

Разработчик / Миграционный инженер:

  • Протестировать скрипт в dev.
  • Проверить соответствие типов задач и workflow.
  • Исправить проблемы с кодировкой и текстиль-форматами.

SVN-администратор:

  • Подготовить дампы и создать репозитории на новом хосте.
  • Настроить pre-revprop-change hook.
  • Запустить fetch_changesets и проверить соответствие ревизий.

Критерии приёмки

  • Количество импортированных тикетов = количеству в Trac (или доп. виды объяснены).
  • Комментарии и история изменений сохранены и корректно отображаются.
  • Записи timelog перенесены и ссылаются на правильные тикеты.
  • SVN-репозиторий подключён, и изменения видны в Redmine.
  • Основные рабочие процессы (создание/закрытие задач, назначения) проходят проверку тестовой группы.

Когда миграция может не сработать и альтернативы

  • Сложные кастомные плагины Trac, которые сильно модифицируют данные — может потребоваться ручной перенос или разработка адаптера.
  • Повреждённые или неконсистентные данные (например, сломанные вики-страницы) — потребуется ручная чистка.
    Альтернативные подходы: частичный импорт (только тикеты), разработка собственного конвертера на Python/Ruby, либо поддерживать Trac и интегрировать ссылки между системами.

Технические советы и чекпоинты

  • Всегда проверяйте кодировку (UTF-8) в базе Trac перед импортом.
  • Тестируйте mapping custom fields и workflow заранее.
  • Для больших проектов проводите миграцию в несколько этапов по проектам.
  • Логи rake-скриптов изучайте сразу — большинство ошибок видно в stderr.

Приватность и соответствие требованиям (общая заметка)

При переносе данных проверьте местные требования по хранению персональных данных и доступу (GDPR/локальные правила): удалите или анонимизируйте чувствительные поля перед публикацией в новой системе.

Пользовательский план отката (Runbook)

  1. Если после миграции обнаружены критические несоответствия — немедленно отключите Redmine (режим обслуживания) и восстановите Trac из архива.
  2. Откат Redmine: удалить созданные проекты и импортированные репозитории, восстановить старую БД Redmine из бэкапа (если он был сделан заранее).
  3. Провести анализ ошибок и повторить миграцию в тестовой среде с исправлениями.

Отладка распространённых ошибок

  • Проблемы с кодировкой: проверить значения поля database.encoding и перекодировать дамп при необходимости.
  • Отсутствие прав на файлы: убедиться, что www-data владеет каталогами tmp и log.
  • Неправильные ссылки в timelog: применить текстиль-патч для комментов timelog.

Сводка

  • Миграция Trac → Redmine выполнима и может быть почти полностью автоматизирована при помощи кастомного скрипта.
  • Всегда тестируйте на dev, делайте полные бэкапы и согласуйте окно миграции с пользователями.
  • Подготовьте план отката и чек-листы для каждой роли.

Короткие полезные ссылки:

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Кнопка Camera Control на iPhone 16 — руководство
iPhone

Кнопка Camera Control на iPhone 16 — руководство

Separation Alerts на iPhone — как не забывать вещи
iOS

Separation Alerts на iPhone — как не забывать вещи

Исправить Steam: friends network unreachable
Руководство

Исправить Steam: friends network unreachable

Android N-ify: стиль Android Nougat на вашем устройстве
Mobile

Android N-ify: стиль Android Nougat на вашем устройстве

Зашифровать сообщения в Facebook Messenger
Безопасность

Зашифровать сообщения в Facebook Messenger

Как использовать Facebook Live — руководство
Социальные сети

Как использовать Facebook Live — руководство