Error importing from vanilla: invalid byte sequence in UTF-8

Если файл не огромный, его довольно просто конвертировать в UTF-8 с помощью «Блокнота» Windows, если он у вас ещё есть.

По моему мнению, Vanilla Porter предоставляет файл в формате .txt.gz. Вам нужно извлечь файл из этого сжатого формата. После того как вы сохраните его как файл .txt, вы сможете выполнить конвертацию.

  1. Откройте файл .txt в «Блокноте».
  2. Перейдите в меню «Файл» > «Сохранить как» и выберите кодировку UTF-8.
  3. Нажмите «Сохранить».

Если у вас больше нет «Блокнота» или файл слишком велик для него, то, как отметил @pfaffman, вы можете найти в Google запрос «конвертировать txt в UTF-8», чтобы получить инструкции, подходящие для ваших устройств и доступного программного обеспечения.

Хорошо, это сработало. Но теперь я получаю эту ошибку:

script/import_scripts/vanilla.rb:98:in `import_users': undefined method `[]' for nil:NilClass (NoMethodError)

admin_role_id = @roles.select { |r| r[:name] == "Administrator" }.first[:role_id]
                                                                       ^^^^^^^^^^

Первый пользователь — администратор в базе данных.

Это именно та ошибка, с которой я сталкивался до того, как заметил, что нужно выбрать Vanilla 2 из выпадающего списка «Тип форума Source». Когда оставался выбранным Vanilla 1, в файле экспорта были пустые таблицы данных. Если вы выбрали Vanilla 2, боюсь, я не могу предложить ничего большего, исходя из моего ограниченного опыта миграции на Vanilla. Возможно, у кого-то ещё есть идеи.

Какая версия Vanilla работает на вашем текущем форуме?

Текущая версия — Vanilla Higher Logic. Я недавно обновился до этой версии. У меня есть резервная копия моего форума Vanilla v2.6. Я пытался импортировать данные из старой базы данных, но проблема осталась той же.

Можете ли вы подтвердить запись UserRole для администратора?

@ddeveloper, я думаю, что ответ — 16, но я не совсем уверен, что именно вы спрашиваете!
Я добавил ниже некоторые примеры данных из моего файла экспорта, на случай, если вам будет полезно увидеть структуру таблиц.

Данные экспорта

Вот что файл экспорта показывает для таблицы UserRole, только для пользователя System и меня (пользователь 2):

Table: UserRole
UserID:int,RoleID:int
"1","16"
"2","2"
"2","8"
"2","16"
"2","32"
"2","33"

Вот что мой файл экспорта показывает для таблицы Role:
Table: Role

RoleID:int,Name:varchar(100),Description:varchar(500),Sort:int,Deletable:tinyint,CanSession:tinyint,PersonalInfo:tinyint
"2","Guest","Гости могут только просматривать контент. Любой, кто просматривает сайт и не авторизован, считается \"Гостем\".","2","0","0","0"
"3","Unconfirmed","Пользователи должны подтвердить свои электронные адреса, прежде чем стать полноценными участниками. Им назначается эта роль.","3","0","1","0"
"4","Applicant","Пользователи, подавшие заявку на членство, но ещё не принятые. Они имеют те же права, что и гости.","4","0","1","0"
"8","Member","Участники могут участвовать в обсуждениях.","5","1","1","0"
"16","Administrator","Администраторы имеют право делать всё.","7","1","1","0"
"32","Moderator","Модераторы имеют право редактировать большинство контента.","6","1","1","0"
"33","Ambassador","Бывший Амбассадор в оригинальном сообществе","1","1","1","0"

Вот что он показывает для таблицы User — только запись System и меня. (Некоторая информация была удалена, но это всё ещё должно дать вам представление о структуре таблицы.)

Table: User
UserID:int,Name:varchar(50),Password:varbinary(100),HashMethod:varchar(10),Photo:varchar(255),Title:varchar(100),Location:varchar(100),About:text,Email:varchar(200),ShowEmail:tinyint,CountVisits:int,CountInvitations:int,CountNotifications:int,InviteUserID:int,DiscoveryText:text,Preferences:text,Permissions:text,Attributes:text,DateSetInvitations:datetime,DateOfBirth:datetime,DateFirstVisit:datetime,DateLastActive:datetime,LastIPAddress:varchar(15),DateInserted:datetime,InsertIPAddress:varchar(15),DateUpdated:datetime,UpdateIPAddress:varchar(15),HourOffset:int,Score:float,Admin:tinyint,Confirmed:tinyint,Verified:tinyint,Banned:tinyint,Deleted:tinyint,Points:int,CountUnreadConversations:int,CountDiscussions:int,CountUnreadDiscussions:int,CountComments:int,CountDrafts:int,CountBookmarks:int
"1","System","XXX","Random","https://XXX.com/applications/dashboard/design/images/usericon.png",\N,\N,\N,"system@stub.vanillacommunity.example","0","0","0","4",\N,\N,\N,"",\N,\N,\N,\N,\N,\N,"2022-11-18 03:39:35",\N,\N,\N,"0",\N,"2","1","0","0","0","0",\N,"1",\N,\N,\N,\N
"2","southpaw","XXX","Vanilla","userpics/QOZBY6BY3J3T/O8C563H2DWZV.jpg",\N,\N,\N,"XXX@gmail.com","0","258","0","24",\N,\N,"{\"DashboardNav.DashboardLandingPage\":\"Settings\"\,\"DashboardNav.SectionLandingPages\":{\"Settings\":\"/dashboard/settings/layout\"\,\"Moderation\":\"/dashboard/user\"}\,\"DashboardNav.Collapsed\":[]\,\"Popup.WallComment\":\"1\"\,\"Popup.ActivityComment\":\"1\"\,\"Email.AnswerAccepted\":\"1\"\,\"Popup.AnswerAccepted\":\"1\"\,\"Email.QuestionAnswered\":\"1\"\,\"Popup.QuestionAnswered\":\"1\"\,\"Email.ConversationMessage\":\"1\"\,\"Popup.ConversationMessage\":\"1\"\,\"Email.BookmarkComment\":\"1\"\,\"Email.Mention\":\"1\"\,\"Email.ParticipateComment\":\"1\"\,\"Popup.DiscussionComment\":\"1\"\,\"Popup.BookmarkComment\":\"1\"\,\"Popup.Mention\":\"1\"\,\"Popup.ParticipateComment\":\"1\"}","{\"0\":\"Garden.Email.View\"\,\"1\":\"Garden.Settings.Manage\"\,\"2\":\"Garden.Settings.View\"\,\"3\":\"Garden.SignIn.Allow\"\,\"4\":\"Garden.Users.Add\"\,\"5\":\"Garden.Users.Edit\"\,\"6\":\"Garden.Users.Delete\"\,\"7\":\"Garden.Users.Approve\"\,\"8\":\"Garden.Activity.Delete\"\,\"9\":\"Garden.Activity.View\"\,\"10\":\"Garden.Profiles.View\"\,\"11\":\"Garden.Profiles.Edit\"\,\"12\":\"Garden.Curation.Manage\"\,\"13\":\"Garden.Moderation.Manage\"\,\"14\":\"Garden.PersonalInfo.View\"\,\"15\":\"Garden.AdvancedNotifications.Allow\"\,\"16\":\"Garden.Community.Manage\"\,\"17\":\"Garden.Uploads.Add\"\,\"18\":\"Vanilla.Tagging.Add\"\,\"19\":\"Conversations.Conversations.Add\"\,\"20\":\"Plugins.Attachments.Upload.Allow\"\,\"21\":\"Reactions.Positive.Add\"\,\"22\":\"Reactions.Negative.Add\"\,\"23\":\"Reactions.Flag.Add\"\,\"24\":\"Vanilla.Discussions.View\"\,\"25\":\"Vanilla.Discussions.Add\"\,\"26\":\"Vanilla.Discussions.Edit\"\,\"27\":\"Vanilla.Discussions.Announce\"\,\"28\":\"Vanilla.Discussions.Sink\"\,\"29\":\"Vanilla.Discussions.Close\"\,\"30\":\"Vanilla.Discussions.Delete\"\,\"31\":\"Vanilla.Comments.Add\"\,\"32\":\"Vanilla.Comments.Edit\"\,\"33\":\"Vanilla.Comments.Delete\"\,\"Vanilla.Discussions.View\":[1\,2\,3\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Add\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Edit\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Announce\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Sink\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Close\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Discussions.Delete\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Comments.Add\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Comments.Edit\":[1\,2\,4\,5\,6\,7\,8\,9]\,\"Vanilla.Comments.Delete\":[1\,2\,4\,5\,6\,7\,8\,9]}","{\"TimeZone\":\"America/New_York\"\,\"LastLoginAttempt\":1687373198\,\"LoginRate\":1\,\"CheckedComments\":[]\,\"floodcontrol.profilecontroller.2.currentpostcount\":1\,\"\":\"2022-12-04 02:28:17\"\,\"CheckedDiscussions\":[]}",\N,"1975-09-16 00:00:00","2022-11-18 03:39:35","2023-07-17 01:06:51","A¾’²","2022-11-18 03:39:35","A¾’²","2023-07-11 03:36:17","A¾’²","-4",\N,"1","1","1","0","0","182","3","14",\N,"83","0",\N

Единственное различие, которое я обнаружил, — это «Капитализация». Скрипт vanilla.rb не принимает строчные буквы в названиях ролей.
По какой-то причине в моём файле экспорта в названиях ролей использовались строчные буквы.
Теперь эта ошибка исправлена, но мне ещё предстоит справиться со множеством других ошибок, прежде чем я смогу полностью завершить миграцию :smiley:

Теперь мне нужно исправить форматирование дат:

script/import_scripts/vanilla.rb:281:in `strptime': invalid date (Date::Error)

    DateTime.strptime(date, "%Y-%m-%d %H:%M:%S")