Впечатляет! Даже если мой старый SMF не использует красивые URL?
Что ты имеешь в виду под «не совсем»?
Впечатляет! Даже если мой старый SMF не использует красивые URL?
Что ты имеешь в виду под «не совсем»?
Ответы на ваши вопросы:
index.php?topic=123) будут созданы как постоянные ссылки и будут работать, но якоря на конкретные сообщения, такие как index.php?topic=123.msg789#msg789, больше не будут сохраняться/работать. Они обрезаются до идентификатора темы.Ниже пример постоянных ссылок из моего форума, импортированного из SMF2:

По крайней мере, тема останется ориентиром для конкретных постов. Это вполне достаточно. Отлично, большое спасибо за ваш ответ и за составление этих инструкций.
Извините, забыл спросить: если мой SMF настроен как категория → доска → дочерняя доска, нужно ли мне сначала удалить категорию «доска», чтобы структура состояла только из двух уровней (форум → подфорум), для корректного конвертирования в Discourse?
Привет @marcozambi,
Мне интересно, как вам удалось это настроить. Я использовал импортер 19 октября, чтобы перенести большой форум с SMF на Discourse, и все ссылки в старом формате, по сути, утеряны (то есть при использовании старых URL-адресов я получаю ошибку 404).
Например, старая ссылка:
указывала на следующую тему:
Не могли бы вы поделиться своим «магическим» рецептом? ![]()
Никакой особой магии.
Когда я делал импорт из SMF в сентябре 2018 года, скрипт импортера SMF2 выполнял всю магию.
После импорта каждого сообщения скрипт создавал соответствующую постоянную ссылку.
В любом случае я внес незначительные доработки в скрипты, которые подробно описал в первом сообщении этой темы.
Это верно. Вам нужно «сплющить» существующее дерево подфорумов SMF до двух уровней.
Да, и я благодарю вас за ваш замечательный пост. Я внимательно изучил его и смог успешно мигрировать форум с 6 миллионами сообщений.
Но, возможно, постоянные ссылки были созданы. Как вы проверяете их наличие? Если они есть в базе данных, то проблема может быть лишь в настройках nginx, которые мне нужно исправить.
Вы можете просмотреть список ваших постоянных ссылок, перейдя в Администрирование → Настроить → Постоянные ссылки.
Оттуда вы также можете при необходимости создать новые ссылки.
![]()
Как я и предполагал, оно было пустым. Это означает, что в нашем случае часть скрипта не сработала.
Ничего страшного, я всё ещё могу создать некоторые из них вручную (только что попробовал и успешно выполнил для примера, который я привёл выше).
На этом этапе должны быть указаны данные старой базы данных SMF2 или нужно использовать именно значения ‘user’, ‘pass’, ‘db’?
На этом этапе должны быть указаны данные старой базы данных SMF2 или нужно использовать именно значения ‘db’, ‘user’ и ‘pass’?
Это единственный шаг, где нужно использовать оригинальные данные старой базы данных SMF2?
Это учетные данные для подключения к экземпляру MySQL в Docker, куда был импортирован дамп базы данных вашего форума SMF.
Чтобы прояснить: экземпляр MySQL в Docker работает на том же сервере, где запущен Discourse, и он нужен только для хранения дампа, который вы должны были создать из базы данных SMF.
Это команда, которую вы должны выполнить на сервере, где хранится оригинальная база данных SMF2, чтобы получить дамп, который затем нужно импортировать в экземпляр MySQL в Docker, упомянутый выше.
Спасибо за ответ.
Да, я уже импортировал оригинальную базу данных smf2 на сервер Discourse в контейнеризованный экземпляр MySQL.
При использовании информации о контейнеризованном MySQL в файле Settings.php при запуске скрипта импорта возникает следующая ошибка:
Загрузка существующих групп…
Загрузка существующих пользователей…
Загрузка существующих категорий…
Загрузка существующих сообщений…
Загрузка существующих тем…
создание групп
Трассировка (последняя ошибка):
11: из script/import_scripts/smf2.rb:701:in `’
10: из script/import_scripts/smf2.rb:28:in `run’
9: из /var/www/discourse/script/import_scripts/base.rb:47:in `perform’
8: из script/import_scripts/smf2.rb:66:in `execute’
7: из script/import_scripts/smf2.rb:77:in `import_groups’
6: из script/import_scripts/smf2.rb:281:in `query’
5: из script/import_scripts/smf2.rb:287:in `__query’
4: из /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.4/lib/patches/db/mysql2.rb:22:in `query’
3: из /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query’
2: из /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt’
1: из /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query’
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query’: Таблица ‘db.smf_membergroups’ не существует ( Mysql2::Error )
Есть какие-либо идеи?
Я следовал этому руководству буквально по шагам несколько раз, но каждый раз застревал на этом этапе.
Спасибо.
Проверьте в своей базе данных MySQL, существует ли таблица smf_membergroups. Если её нет, то:
В конечном счёте расширение файла не имеет значения. Если файл содержит корректные SQL-запросы, он будет загружен независимо от этого.
Кроме того, часто бывает, что у базы данных может быть другой префикс, чем smf_. У многих импортеров есть такая опция, но я не проверял этот.
Использование тех же учетных данных из базы данных smf2 для экземпляра MySQL в Docker решило мою проблему. Спасибо, ребята!
@Paracelsus Похоже, у меня та же проблема — постоянные ссылки пустые. ![]()
Мой smf2 работает на корневом домене, а Discourse — на поддомене корня smf2. Имеет ли это значение?
Да… постоянные ссылки — это сплошная головная боль, но я научился с этим жить. Я перепробовал все веб-страницы, которые смог найти, где была размещена ссылка на наш форум (в старом формате SMF), зашёл на эти страницы, скопировал какую-нибудь текстовую строку или переписал абзац, нашёл их на форуме Discourse и заменил на постоянную ссылку. Если ваш форум SMF всё ещё работает, рекомендую сделать это сейчас, потому что иногда ссылки, которые люди размещают на своих сайтах, не содержат никакого цитируемого текста или текстовой строки — только URL, и вы всё равно сможете найти нужную тему.
В нашем случае мы сначала использовали версию discourse.forumscp.com, а форумscp.com в SMF какое-то время оставался «основным форумом» (чтобы иметь возможность тестировать функции в Discourse и привыкнуть к нему). Я несколько раз проверял процесс постепенного обновления, а также за пару недель до перехода, чтобы убедиться, что миграция пройдёт как надо. В день перехода мы отключили старый форум, выполнили последнее постепенное обновление базы данных из SMF в Discourse, а затем изменили домен, следуя инструкциям, которые где-то здесь описаны. Нам также потребовалась помощь хостинг-провайдера для проверки конфигураций nginx. Точно не помню, но что-то ещё нужно было изменить в настройках DNS, однако мы просто следовали указаниям хостинг-провайдера, и всё прошло гладко.
Вы можете найти другой импортер, поддерживающий постоянные ссылки, и скопировать его код. VBulletin и phpBB, вероятно, являются хорошими примерами.