Как импортировать изображения bbPress и настроить редирект 301 на Discourse?

Привет,

Мне удалось перенести всё содержимое bbPress в среду разработки Discourse с помощью скрипта bbpress.rb.

Однако у меня есть два вопроса, с которыми нужна помощь:

  1. Все изображения в Discourse отображаются по пути “/wp-content/uploads/img_644e48aedc2bf.jpg” — это тот же путь к медиафайлам, что и в bbPress. Как можно импортировать сами изображения, чтобы они переместились в ожидаемый путь на Discourse?

  2. Мои стандартные постоянные ссылки в bbPress выглядели так: "www.demo.com/%postname%/". bbPress также использует постоянные ссылки вида "www.demo.com/?p=123".

В базе данных SQL мой вопрос: как можно изменить код bbpress.rb, чтобы импортировать старые ссылки и настроить 301-редирект на новые ссылки Discourse без проблем в будущем?

То есть, когда пользователь пытается перейти на старый сайт по адресу
www.demo.com/%postname%/,
ссылка должна перенаправляться с кодом 301 на новый адрес
"https://my-discoursexxxx.com/t/1234/%postname%".

Можете ли вы помочь мне с этими вопросами?

Привет!

По пункту 1: вам нужно изменить скрипт bbPress, чтобы он копировал аватары из папки и загружал их в ваш экземпляр Discourse. Вы можете ознакомиться со скриптом импорта vBulletin, чтобы понять, как это можно реализовать (строка 212).

Что касается пункта 2, то это будет немного сложнее, так как Discourse не может получать данные с внешних веб-сайтов (например, http://www.demo.com). Лучший способ решить эту задачу — сохранить тот же домен и внести небольшие изменения в функцию create_permalinks (строка 379), чтобы она поддерживала параметр postname.

Если речь идет о изображениях в постах, то при включенной опции «Загружать удаленные изображения локально» Discourse загрузит их. Для этого должны выполняться фоновые задания Sidekiq.

Вы можете посмотреть другие скрипты, работающие с «Постоянными ссылками».

Кратко: значения вида p=123 должны быть сохранены в TopicCustomFields или PostCustomFields с именем import_id, после чего вы можете запустить скрипт для создания постоянных ссылок.

Несколько минут назад я активировал опцию «Загружать удалённые изображения локально» и загрузил все изображения на локальный сервер «bbPress». Как мне активировать фоновые задания Sidekiq, чтобы Discourse загружал их во время импорта?

Приношу извинения за неудобства. Как мне перенаправить все ссылки с

www.old.com/%postname%/

на

www.NewDiscourse.com/t/id/%postname%/

Мне кажется, что %postname%/ — это не одно и то же.

Вам просто нужно дождаться их завершения. Если вы предпочитаете изменить скрипт так, чтобы он обрабатывал загрузки при запуске, вы можете изучить другие скрипты, которые это делают.

Вы можете посмотреть другие скрипты, создающие постоянные ссылки (пермалинки). vbulletin.rb содержит пример реализации пермалинков.

Существующий скрипт bbpress.rb обрабатывает вложения, находящиеся в базе данных, значит, у вас должны быть пользователи, которые ссылались на них напрямую, или что-то подобное? Вам нужно будет найти их с помощью регулярного выражения, а затем обработать так же, как это делают другие функции загрузки. Если Discourse уже обрабатывает их, возможно, лучше просто позволить ему это сделать, так как, скорее всего, это сработает.

Спасибо @pfaffman @nizar9

Мне удалось сохранить и перенести все изображения из старых статей bbPress в Discourse, включив функцию «Скачивать удалённые изображения» в панели управления.

Но :cry: я всё ещё не могу настроить редирект 301 со старых ссылок bbPress, например:

> https://www.demo.com/%postname%

на новые ссылки:

> www.NewDiscourse.com/t/id/%postname%/

И я не могу решить эту проблему через регулярные выражения в htaccess, потому что не знаю новый ID для той же темы.

Вы не можете. Существует как минимум один скрипт импорта, который выгрузит данные, чтобы вы могли это сделать. Как я уже говорил ранее, в Discourse возможно создать перенаправления через Permalink, чтобы решить эту проблему.

Импорт изображений из bbPress в Discourse

Вот пример скрипта bbpress.rb. Он копирует аватары из директории bbPress и загружает их в ваш экземпляр Discourse.

# bbpress.rb

# Импорт аватаров bbPress и обновление аватаров в Discourse
def import_avatars
  users.each do |user|
    bbpress_avatar_path = "/path/to/bbpress/avatars/#{user['avatar_filename']}"
    next unless File.exist?(bbpress_avatar_path)

    avatar_upload = File.open(bbpress_avatar_path)
    DiscourseAvatar.create_for(user['email'], avatar_upload, override_gravatar: true)
  end
end

# Вызов функции
import_avatars

Теперь создайте функцию create_permalinks для генерации соответствующих URL и обработки редиректов 301.

# bbpress.rb

# Создание постоянных ссылок с параметром postname и обработка редиректов
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # Реализуйте эту функцию для извлечения postname

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # Измените эту строку, используя правильную структуру URL

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # Реализуйте эту функцию для создания редиректа 301
  end
end

# Вызов функции
create_permalinks

Функция create_redirect должна добавлять редирект 301 со старой постоянной ссылки bbPress на новый URL Discourse.
Примечание: Замените путь в соответствии с вашими настройками.

Надеюсь, это сработает.

Это не сработает для загрузок. Discourse присваивает им все новые имена. Я не заметил, что они хотели редиректы изображений. Я никогда не видел, чтобы кто-то запрашивал это.

Это может сработать для некоторых тем, где Discourse и bbpress случайно используют одинаковые слаг.