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?
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 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). 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.
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.
Você pode procurar por outros scripts para “Permalink”.
Em resumo, os valores p=123 devem ser armazenados em TopicCustomFields ou PostCustomFields com o nome import_id e você pode então executar um script para criar os permalinks.
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?
Peço desculpas pelo inconveniente, como posso redirecionar todos os links de
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.
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á.
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.
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.
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.
# 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.
# 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ê.
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.