# Como importar imagens e links do bbPress com redirecionamento 301 para Discourse?

**URL:** <https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312>\
**Category:** Migration\
**Tags:** bbpress\
**Created:** [Abril 30, 2023, 12:10pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312 "2023-04-30T12:10:33Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![hiccup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hiccup/32/141306_2.png) [@hiccup](https://meta.discourse.org/u/hiccup)\
**Post date:** [Abril 30, 2023, 12:10pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/1 "2023-04-30T12:10:33Z")

</div>

Olá,

Consegui transferir todo o conteúdo do bbPress para o “ambiente de desenvolvimento” do Discourse, usando o script bbpress.rb.

Mas tenho duas perguntas com as quais gostaria de ajuda:

1: Todas as imagens aparecem no Discourse com este caminho “/wp-content/uploads/img\_644e48aedc2bf.jpg”, que é o mesmo caminho de mídia do bbPress. Como posso importar as imagens também para que elas sejam movidas para o caminho esperado no Discourse?

2: Os permalinks padrão do meu bbPress eram assim `"www.demo.com/%postname%/"`, o bbPress também usa permalinks  
`"www.demo.com/?p=123"`  
no sql. Minha pergunta é como posso editar o código do bbpress.rb para que ele possa importar links antigos e redirecionar para os novos links do Discourse 301 sem problemas depois?  
Então, quando o usuário tentar visitar o site antigo  
`www.demo.com/%postname%/`  
, o link será redirecionado 301 para o novo  
`"https://my-discoursexxxx.com/t/1234/%postname%"`  
Você pode me dar uma mão com essas perguntas?

---

<div class="post-metadata">

**Author:** ![nizar9](https://avatars.discourse-cdn.com/v4/letter/n/9e8a1a/32.png) [@nizar9](https://meta.discourse.org/u/nizar9)\
**Post date:** [Abril 30, 2023, 11:25pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/2 "2023-04-30T23:25:46Z")

</div>

Olá,

Para o item 1, você precisará alterar o script do bbpress para copiar os avatares da pasta e carregá-los em sua instância do Discourse. Você pode verificar o [script de importação do vbulletin](https://github.com/discourse/discourse/blob/main/script/import_scripts/vbulletin.rb) para ter uma ideia de como isso pode ser alcançado, na linha 212.

Quanto ao item 2, isso na verdade será um pouco mais complicado, já que o Discourse não pode acessar dados de sites externos (como [http://www.demo.com](http://www.demo.com)). Portanto, a melhor maneira de conseguir isso seria manter o mesmo domínio e fazer algumas pequenas alterações na função create\_permalinks (linha 379) para suportar o parâmetro postname.

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Maio 1, 2023, 2:36pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/3 "2023-05-01T14:36:48Z")

</div>

> [@hiccup](#):
>
> Todas as imagens aparecem no Discourse com este caminho “/wp-content/uploads/img\_644e48aedc2bf.jpg” é o mesmo caminho de URL de mídia do bbPress, como posso importar as imagens também para que elas se movam para o caminho esperado no Discourse?

Se você quer dizer em posts, então se você tiver `download remote images to local` (baixar imagens remotas para o local) configurado, o Discourse as baixará. Existem trabalhos do sidekiq que devem ser executados para fazer isso.

> [@hiccup](#):
>
> meus permalinks padrão do bbPress eram assim “[www.demo.com/%postname%/](http://www.demo.com/%25postname%25/)”, o bbPress também usa permalink “[www.demo.com/?p=123](http://www.demo.com/?p=123)”

Você pode procurar por outros scripts para “Permalink”.

Em resumo, os valores `p=123` devem ser armazenados em `TopicCustomFields` ou `PostCustomField`s com o nome `import_id` e você pode então executar um script para criar os permalinks.

---

<div class="post-metadata">

**Author:** ![hiccup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hiccup/32/141306_2.png) [@hiccup](https://meta.discourse.org/u/hiccup)\
**Post date:** [Maio 1, 2023, 3:10pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/4 "2023-05-01T15:10:58Z")

</div>

> [@pfaffman](#):
>
> Existem trabalhos do sidekiq que deveriam ser executados para fazer isso

Há alguns minutos, ativei “baixar imagens remotas para o local” e baixei todas as imagens para o servidor local “bbPress”. Como posso ativar os trabalhos do sidekiq para que o Discourse as baixe durante a importação?

> [@pfaffman](#):
>
> Em resumo, os valores `p=123` devem ser armazenados em `TopicCustomFields` ou `PostCustomField`s com o nome `import_id` e você pode então executar um script para criar os permalinks.

Peço desculpas pelo inconveniente, como posso redirecionar todos os links de

> [www.old.com/%postname%/](http://www.old.com/%25postname%25/)

para

> [www.NewDiscourse.com/t/id/%postname%/](http://www.NewDiscourse.com/t/id/%25postname%25/)

Não acho que %postname%/ seja o mesmo

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Maio 1, 2023, 3:30pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/5 "2023-05-01T15:30:38Z")

</div>

> [@hiccup](#):
>
> Como posso ativar os trabalhos do sidekiq para que o Discourse os baixe durante a importação?

Você só precisa esperar que eles terminem. Se preferir modificar o script para que ele lide com os uploads quando for executado, você pode procurar outros scripts que façam isso.

> [@hiccup](#):
>
> como redireciono todos os links de

Você pode procurar outros scripts que criam Permalinks. `vbulletin.rb` tem um exemplo de permalinks.

O `bbpress.rb` existente lida com anexos que estão no banco de dados, então você deve ter usuários que linkaram diretamente para eles, ou algo assim? Então você precisaria encontrá-los com uma regex e depois lidar com eles da maneira que as outras funções de upload fazem. Se o Discourse estiver lidando com eles, então você pode preferir apenas deixá-lo, pois suspeito que isso funcionará.

---

<div class="post-metadata">

**Author:** ![hiccup](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hiccup/32/141306_2.png) [@hiccup](https://meta.discourse.org/u/hiccup)\
**Post date:** [Maio 3, 2023, 12:02pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/6 "2023-05-03T12:02:26Z")

</div>

Obrigado @pfaffman @nizar9

Consegui salvar e transferir todas as imagens dos antigos artigos do bbPress para o Discourse ativando o recurso `download remote images` no painel de controle.

Mas 😢 ainda estou preso para redirecionar 301 links antigos do bbPress como este

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

para o novo link

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

E não consigo resolver o problema através da expressão regular do htaccess porque não sei qual é o novo id para o mesmo tópico.

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Maio 3, 2023, 3:11pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/7 "2023-05-03T15:11:10Z")

</div>

> [@hiccup](#):
>
> Não consigo resolver o problema através de expressões regulares htaccess porque não sei qual é o novo id para o mesmo tópico.

Você não consegue. Existe pelo menos um script de importação que exportará dados para que você possa. Como eu disse anteriormente, é possível criar redirecionamentos de `Permalink` para resolver o problema no Discourse.

---

<div class="post-metadata">

**Author:** ![nehakakar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nehakakar/32/317424_2.png) [@nehakakar](https://meta.discourse.org/u/nehakakar)\
**Post date:** [Agosto 8, 2023, 8:21pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/8 "2023-08-08T20:21:50Z")

</div>

Importar imagens do bbPress para o Discourse,  
aqui está um exemplo de script bbpress.rb.  
ele copia as imagens de avatar do diretório do bbPress e as carrega na sua instância do Discourse.

```plaintext
# bbpress.rb

# Importar avatares do bbPress e atualizar avatares do 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

# Chamar a função
import_avatars

```

Agora crie a função **create\_permalinks** para gerar os URLs apropriados e lidar com os redirecionamentos 301.

```plaintext
# bbpress.rb

# Criar permalinks com o parâmetro postname e lidar com redirecionamentos
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # Implemente esta função para extrair o postname

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # Modifique esta linha com a estrutura de URL correta

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # Implemente esta função para criar um redirecionamento 301
  end
end

# Chamar a função
create_permalinks

```

A função **create\_redirect** deve adicionar um redirecionamento 301 do permalink antigo do bbPress para o novo URL do Discourse.  
observação: Substitua o caminho de acordo com você.

Espero que funcione.

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [Agosto 8, 2023, 8:37pm UTC](https://meta.discourse.org/t/how-to-import-bbpress-images-and-links-redirect-301-to-discourse/263312/9 "2023-08-08T20:37:23Z")

</div>

Isso não funcionará para os uploads. O Discourse dá a todos eles novos nomes. Eu não tinha notado que eles queriam redirecionamentos de imagem. Eu nunca vi ninguém pedir isso.

Pode funcionar para alguns tópicos onde o Discourse e o bbpress por acaso usam o mesmo slug.
