Может, стоит открыть тикет в Duffield Ocean по поводу неверных символов?
Вы можете использовать SSH-клиент, например PuTTY, или новую оболочку, которая, как я полагаю, входит в состав подсистемы Linux для Windows (в последней версии Windows, которую я использовал, в качестве дескриптора версии был указан год, так что я не смогу помочь). Если у вас Mac, просто откройте терминал и используйте ssh.
Если ваша база данных большая, её загрузка займёт некоторое время, и вы не увидите никакого вывода, кроме нового приглашения, когда процесс завершится. Я предполагаю, что всё работало корректно.
Pups::ExecError: if [ -z "$LETSENCRYPT_ACCOUNT_EMAIL" ]; then echo "LETSENCRYPT_ACCOUNT_EMAIL ENV variable is required and has not been set."; exit 1; fi failed with return #<Process::Status: pid 1187 exit 1>
У меня не был установлен letsencrypt, поэтому я его установил.
В разделе «Подготовка хоста и контейнера Discourse для импорта» не указано, что нужно раскомментировать строку env для LETSENCRYPT_ACCOUNT_EMAIL и ввести свой адрес электронной почты. Это позволило мне преодолеть эту ошибку.
Продолжая, сейчас я нахожусь на финальном этапе импорта. Я захожу в контейнер для импорта и запускаю скрипт импорта. Он сразу же завершается с ошибкой:
Traceback (most recent call last):
1: from script/import_scripts/smf2.rb:4:in `<main>'
script/import_scripts/smf2.rb:4:in `require': cannot load such file -- mysql2 (LoadError)
Я выполнил множество поисков в интернете, но пока безрезультатно.
РЕДАКТИРОВАНИЕ: Думаю, это может быть связано с тем, что mysql не установлена в контейнере. Я попробовал выполнить ‘gem install mysql2’, но получил ответ:
mysql client is missing. You may need to 'apt-get install libmysqlclient-dev' or 'yum install mysql-devel', and try again.
РЕДАКТИРОВАНИЕ 2:
Мне удалось установить mysql2. Сначала пришлось установить инструменты разработки, но предложенный источник был недоступен. Поэтому я выполнил
sudo apt-get install default-libmysqlclient-dev
После этого я смог выполнить
gem install mysql2
Но ошибка осталась прежней. Тогда я попробовал закомментировать эту директиву require в скрипте, чтобы посмотреть, что произойдет. Появилась новая ошибка:
Traceback (most recent call last):
6: from script/import_scripts/smf2.rb:627:in `<main>'
5: from script/import_scripts/smf2.rb:19:in `run'
4: from script/import_scripts/smf2.rb:447:in `parse!'
3: from script/import_scripts/smf2.rb:502:in `parser'
2: from script/import_scripts/smf2.rb:502:in `new'
1: from /usr/local/lib/ruby/2.6.0/optparse.rb:1089:in `initialize'
script/import_scripts/smf2.rb:504:in `block in parser': can't modify frozen String (FrozenError)
Поиск информации об этой ошибке возвращает старый баг Ruby, но он был исправлен уже давно, поэтому я снова в тупике.
Спасибо @Paracelsus! Это помогло. Я изменил значение с true на false.
Ещё один шаг вперёд!
РЕДАКТИРОВАНИЕ:
У меня была странная ошибка, которая, казалось, указывала на неверный IP-адрес. Проблема оказалась в том, что в файле Settings.php был указан неверный пароль. Это исправлено.
Теперь разбираюсь со следующим:
Traceback (most recent call last):
7: from script/import_scripts/smf2.rb:627:in `<main>'
6: from script/import_scripts/smf2.rb:28:in `run'
5: from script/import_scripts/smf2.rb:28:in `new'
4: from script/import_scripts/smf2.rb:62:in `initialize'
3: from script/import_scripts/smf2.rb:274:in `create_db_connection'
2: from script/import_scripts/smf2.rb:274:in `new'
1: from /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `initialize'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.2/lib/mysql2/client.rb:90:in `connect': Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory (Mysql2::Error::ConnectionError)
Предполагаю, что эта строка в файле настроек скрипта предназначена для решения данной проблемы:
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
Следует ли добавить её куда-то внутри контейнера импорта?
Хорошо, я разобрался с вышеуказанной проблемой. Это ошибка в последней версии MySQL. Она больше не поддерживает старые нативные пароли. Самый простой способ решить это — выполнить процесс с помощью MySQL 5.7. Просто измените шаг 3 с:
docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v ~/smf2:/backup --name=mysql mysql
Наши перенеслись без каких-либо дополнительных шагов. Я не знаю точно, где SMF хранит аватары. Вы перенесли свои вложения? Я импортировал только нашу SQL-базу данных и вложения, поэтому, думаю, они там.
Да, они были там, но я переместил аватары в другую папку и забыл скопировать их в папку аватаров, которую импортер использует для сопоставления с пользователем. Проблема решена (хоть и пришлось заново выполнить импорт).
Теперь новая проблема… Заблокированные пользователи при импорте отображаются не как приостановленные, а просто как неактивные. Есть идеи, как сделать так, чтобы они отображались как приостановленные?
Я использую последнюю версию v2.50 beta2 SMF v2.0.17, и из-за текущего файла:
templates/import/mysql-dep.template.yml
генерируется другой файл smf2.rb. Как объясняется на шаге 4, замена “quote =” в текущей итерации выглядит так:
quote = +“\n[quote="#{params[‘author’]}”
Далее отсутствует следующее:
Тем не менее, я всё же выполнил импорт, но он завершается ошибкой: “IGNORE_BBCODE, вы имеете в виду IgnoreUser.”
Извините, я должен был сделать скриншот Traceback, но не сделал. В любом случае, это моё воспоминание.
Есть какие-либо идеи?
Спасибо.