После импорта моего первого старого форума из phpBB три года назад я рад, что мотивировал администратора международного сообщества перенести ещё один, более крупный форум (180 000 участников, 1,6 млн сообщений) на Discourse.
Этот форум использует vBulletin5.
Импорт шёл хорошо до пользователя номер 71712, причина — недопустимые символы в поле веб-сайта:
1: from /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:73:in `parse' /usr/local/rvm/rubies/ruby-2.6.5/lib/ruby/2.6.0/uri/rfc3986_parser.rb:21:in `split': URI must be ascii only "http://url-redacted.com - \u00E6\u00E5\u00F1\u00F2\u00EA\u00EE\u00E5 \u00EF\u00EE\u00F0\u00ED\u00EE \u00F1\u00EC\u00EE\u00F2\u00F0\u00E5\u00F2\u00FC \u00EE\u00ED\u00EB\u00E0\u00E9\u00ED" (URI::InvalidURIError)
и:
1: from /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2394:in `defer_validation' /usr/local/rvm/gems/ruby-2.6.5/gems/addressable-2.7.0/lib/addressable/uri.rb:2475:in `validate': Invalid character in host: 'url-redacted.com.com - æåñòêîå ïîðíî ñìîòðåòü îíëàéí' (Addressable::URI::InvalidURIError)
Если URL «должен состоять только из ASCII-символов», может быть, содержимое поля можно просто удалить или очистить вместо того, чтобы выбрасывать ошибку и останавливать скрипт?
Попробую удалить этого пользователя из базы данных перед повторной попыткой импорта.
Кроме того, у меня есть ещё один вопрос. Аватары хранятся в базе данных и были успешно импортированы.
А что насчёт вложений? В моём случае они также хранятся в базе данных, как это принято по умолчанию в vBulletin. Будут ли они импортированы, или их нужно хранить как отдельные поля?
При миграции нашего старого форума vB3 у нас возникло множество ошибок в скрипте миграции из-за странной кракозябры или странных вложений, которые загрязняли базу данных за 15 лет публикаций.
Вот что я сделал — не очень элегантно, но это сработало для нас:
Когда мы сталкивались с такими ошибками, я просто редактировал скрипт миграции в месте возникновения ошибки и оборачивал проблемную строку в конструкцию:
begin
#здесь проблемная строка на Ruby
rescue
puts "вот интересная информация о проблеме"
end
Мой опыт миграции около 1 миллиона постов с vB3 в Discourse показал, что одним из моих лучших друзей была конструкция:
begin
rescue
end
Мы потеряли несколько некорректных постов, но для меня было приемлемо выбросить горстку постов из миллиона.
Поскольку я не знаком с Rails, я просто заменил содержимое поля веб-сайта на пустую строку. В любом случае это был спам-аккаунт, и это единственная ошибка у почти половины уже обработанных пользователей.
Так что это не большая проблема, если в коде скрипта это не будет исправлено, хотя было бы неплохо, если бы это не блокировало импорт
Что касается вложений, я всё равно попробую импортировать сообщения и посмотрю, будут ли импортированы вложения (или появится ли какое-либо сообщение об ошибке), если я не получу эту информацию к тому времени.
Нам тоже пришлось написать некоторые обёртки на Ruby begin rescue end при импорте вложений из vB3 в Discourse; но в итоге мы успешно перенесли почти все вложения, аватары и изображения профилей.
Когда мы начинали, у меня не было опыта работы с Ruby и Rails; но теперь, благодаря Discourse, я стал большим поклонником Ruby и Rails и каждый день пишу немного кода на Rails.
По-моему, полезно немного разобраться в процессе миграции, если у вас есть интерес.