¿Cómo importar imágenes y enlaces de bbPress redirigir 301 a Discourse?

Hola,

Logré transferir todo el contenido de bbPress al “entorno de desarrollo” de Discourse, utilizando el script bbpress.rb.

Pero tengo dos preguntas con las que me gustaría que me ayudaras:

1: Todas las imágenes aparecen en Discourse con esta ruta “/wp-content/uploads/img_644e48aedc2bf.jpg”, es la misma ruta de medios de bbPress, ¿cómo puedo importar también las imágenes para que se muevan a la ruta esperada en Discourse?

2: Mi permalink predeterminado de bbPress era así "www.demo.com/%postname%/", bbPress también usa permalinks
"www.demo.com/?p=123"
en sql. Mi pregunta es, ¿cómo puedo editar el código de bbpress.rb para importar enlaces antiguos y redirigirlos a los nuevos enlaces de Discourse 301 sin problemas más adelante?
Así, cuando el usuario intente visitar el sitio antiguo
www.demo.com/%postname%/
, el enlace se redirigirá 301 al nuevo
"https://my-discoursexxxx.com/t/1234/%postname%"

¿Puedes echarme una mano con estas preguntas?

Hola,

Para el punto 1, necesitarás cambiar el script de bbpress para copiar los avatares de la carpeta y subirlos a tu instancia de Discourse. Puedes consultar el script de importación de vbulletin para tener una idea de cómo se podría lograr, en la línea 212.

En cuanto al punto 2, en realidad será un poco más complicado ya que Discourse no puede acceder a los datos de sitios web externos (como http://www.demo.com). Por lo tanto, la mejor manera de lograrlo sería mantener el mismo dominio y hacer algunos pequeños cambios en la función create_permalinks (línea 379) para admitir el parámetro postname.

1 me gusta

Si te refieres a las publicaciones, entonces si tienes configurado descargar imágenes remotas a local, Discourse las descargará. Hay trabajos de Sidekiq que deberían ejecutarse para hacer eso.

Puedes buscar otros scripts para “Permalink”.

En resumen, los valores p=123 deberían almacenarse en TopicCustomFields o PostCustomFields con el nombre import_id y luego puedes ejecutar un script para crear los permalinks.

1 me gusta

Hace unos minutos, activé “descargar imágenes remotas a local” y descargué todas las imágenes al servidor local “bbPress”. ¿Cómo puedo activar los trabajos de sidekiq para que Discourse las descargue durante la importación?

Disculpas por las molestias, ¿cómo puedo redirigir todos los enlaces de

www.old.com/%postname%/

a

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

No creo que %postname%/ sea lo mismo.

Solo tienes que esperar a que terminen. Si prefieres modificar el script para que se encargue de las cargas cuando se ejecute, puedes buscar otros scripts que lo hagan.

Puedes buscar otros scripts que creen Permalinks. vbulletin.rb tiene un ejemplo de permalinks.

El bbpress.rb existente se encarga de los archivos adjuntos que están en la base de datos, así que debes tener usuarios que enlazaron directamente a ellos, ¿o algo así? Así que necesitarías encontrarlos con una expresión regular y luego manejarlos de la manera que lo hacen las otras funciones de carga. Si Discourse se está encargando de ellos, entonces es mejor dejar que lo haga, ya que sospecho que eso funcionará.

1 me gusta

Gracias @pfaffman @nizar9

Pude guardar y transferir todas las imágenes de los antiguos artículos de bbPress a Discourse habilitando la función descargar imágenes remotas en el panel de control.

Pero :cry: todavía estoy atascado para redirigir 301 enlaces antiguos de bbPress como este

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

al nuevo enlace

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

Y no puedo resolver el problema a través de la expresión regular de htaccess porque no sé cuál es el nuevo id para el mismo tema.

No puedes. Hay al menos un script de importación que volcará datos para que puedas hacerlo. Como dije anteriormente, es posible crear redirecciones de Permalink para resolver el problema en Discourse.

Importar imágenes de bbPress a Discourse,
aquí tienes un script de ejemplo bbpress.rb.
copia las imágenes de avatar del directorio de bbPress y las carga en tu instancia de Discourse.

# bbpress.rb

# Importar avatares de bbPress y actualizar avatares de 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

# Llamar a la función
import_avatars

Ahora crea la función create_permalinks para generar las URL apropiadas y manejar las redirecciones 301.

# bbpress.rb

# Crear permalinks con el parámetro postname y manejar redirecciones
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # Implementa esta función para extraer postname

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # Modifica esta línea con la estructura de URL correcta

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # Implementa esta función para crear una redirección 301
  end
end

# Llamar a la función
create_permalinks

La función create_redirect debería añadir una redirección 301 desde el permalink antiguo de bbPress a la nueva URL de Discourse.
nota: Reemplaza la ruta según corresponda.

Espero que funcione.

1 me gusta

Eso no funcionará para las cargas. Discourse les da nombres nuevos a todos. No me había dado cuenta de que querían redirecciones de imágenes. Nunca he visto a nadie pedir eso.

Podría funcionar para algunos temas en los que Discourse y bbpress usan la misma ruta.