Migrar um fórum phpBB3 para Discourse

O Markdown também deve funcionar, mas acho que usar <strong> pode contornar ainda mais casos extremos. Lembre-se, misturar HTML e Markdown também tem seus problemas… Aqui está uma solução simples de Markdown:

**texto\\\n\\\nmultilinha**

Estou curioso, de qual versão do phpBB você está importando? A conversão de BBCode para Markdown é muito melhor para a 3.2 do que para versões anteriores. Idealmente, você não deveria mais ver [b] em posts importados.

2 curtidas

Acho que você está certo, não sei por que não pensei nisso primeiro…

Estou migrando do phpBB 3.0.7-PL1.

2 curtidas

Você fará um grande favor a si mesmo se atualizar para a versão 3.2 antes da importação. :wink:

Certifique-se de que os BBCodes em todas as postagens sejam migrados para o novo formato de armazenamento executando o reparser do phpBB: https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

3 curtidas

Pensei nisso no início, mas… eu odeio coisas de computador :sweat_smile:
Não conheço bem o phpBB e não queria ter que lidar com qualquer erro que pudesse acontecer durante uma atualização de uma versão tão antiga.

Como o script de migração do Discourse é compatível com o phpBB 3.0, optei por não atualizar o phpBB…
Talvez alguns problemas de bbcode que encontrei tivessem sido evitados com uma atualização do phpBB. Coisas como listas aninhadas, [b] com novas linhas, etc… :man_shrugging:

Mas como comecei a trabalhar na importação em dezembro, estou perto de ter uma importação que funcione bem (idealmente, o novo fórum estaria online em talvez duas semanas…) e não tenho certeza se quero experimentar uma atualização do phpBB agora, especialmente se eu tiver que revisar todas as correções de importação personalizadas que fiz para ver se o importador do phpBB 3.2 gerencia essas coisas melhor :sweat_smile:. Seria demorado.

Dito isso… eu poderia experimentar coisas neste fim de semana tarde se eu estiver entediado o suficiente!


edit: Tentei; mudar para um novo servidor e depois atualizar para o pbpBB 3.2 é um incômodo. Problemas de HTTPS. Problemas de cache. Outros problemas. Procedimentos complicados e frustrantes. O tutorial oficial aconselha o uso de ferramentas que exigem versão desatualizada do PHP (olá, PHP 5, quanto tempo não te vejo…). Aparentemente, às vezes fico entediado, mas não louco - não o suficiente para fazer esse tipo de coisa, pelo menos.

Gerhard! Você está enganando! Atualizar para a versão 3.2 não é um grande favor! :laughing:

Mas chega de falar sobre o próprio phpBB… E louve a atualização com um clique do Discourse.

1 curtida

Olá,

Estou tentando migrar usuários do WordPress para o Discourse. Consegui seguir as instruções para me conectar ao nosso banco de dados WP e importar usuários no contêiner Docker. Eu queria ter certeza de que nenhum e-mail será enviado durante ou após a migração, pois estamos usando o plugin SSO do WordPress.

Eu prefixei os e-mails com “import_” para que eles não recebam, caso haja tarefas em segundo plano enviando confirmação por e-mail após a conclusão da migração.

Vejo que há uma coluna last_emailed_at definida após a migração:

Eu sei que é definido por opts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now) em ImportScripts::Base::create_user()

Existe uma função semelhante a admin.email_tokens.update_all(confirmed: true) usada em ImportScripts::Base::create_admin onde o e-mail é confirmado?

Não vejo nenhum log mostrando os e-mails enviados. E-mails foram realmente enviados? O Discourse tentará enviar e-mails depois que eu alterar os e-mails para válidos?

1 curtida

Isso está fora do tópico, já que este tópico é sobre a migração do phpBB3… :wink:

Eu recomendo usar um domínio .invalid se você quiser ter certeza de que alguns usuários nunca receberão e-mails (por exemplo, foo@mywpimport.invalid). Mas, se você apenas quiser desabilitar e-mails de saída até estar pronto, definir a configuração do site disable_emails como “yes” ou “non-staff” é sua melhor opção!

E-mails de saída são automaticamente desabilitados durante uma importação. Os valores do atributo last_emailed_at provavelmente são do Discourse tentando enviar um e-mail, antes de descobrir que não tem permissão.

O Discourse definitivamente tentará enviar e-mails após a migração.

2 curtidas

Obrigado, primeiro tentei uma string vazia para o campo de e-mail e a classe base ImportScript gerou e-mails falsos com o domínio inválido. Eles também têm o atributo last_emailed_at definido.

Então, o que você está dizendo é que assim que eu corrigir o e-mail do banco de dados, o Discourse tentará enviar o e-mail? Mas um login normal autenticado pelo WordPress não requer confirmação por e-mail. Não há como contornar isso com o ImportScript?

1 curtida

Minha migração foi concluída e bem-sucedida.
No entanto, enfrentei dois problemas. Por favor, me diga se estou fora do tópico.

  1. O conteúdo de algumas postagens tem este tipo de conteúdo:

    [url=https://www.casimages.com/i/1907271141431956116331631.jpg.html][ 
    [img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img][/url]
    

    As imagens aparecem na pré-visualização, mas estão quebradas na postagem em si, mesmo após a reconstrução do HTML:

    O HTML gerado para cada imagem é:

    <p><a href="https://www.casimages.com/i/1907271151181956116331666.jpg.html" data-bbcode="true"><span alt="" class="broken-image" title="Esta imagem está quebrada"><svg class="fa d-icon d-icon-unlink svg-icon" aria-hidden="true"><use href="#unlink"></use></svg></span></a></p>
    

    Encontro esse problema em muitas postagens. Você tem alguma ideia para corrigir isso globalmente?

  2. Como muitos fóruns antigos, os links antigos do Imageshack estão quebrados há muito tempo e para sempre. Mas alguns links agora exibem uma bandeira da Ucrânia em vez de nada:

    Como você lidaria com esse comportamento?
    Estou aberto a qualquer ideia, mas um administrador do fórum tem uma cópia estática de todo o fórum em um disco rígido antigo, onde a maioria das imagens antigas são válidas (já que foram baixadas e armazenadas localmente). Estou pensando que, no futuro, talvez eu possa criar um script que substitua todos os links “mortos” do Imageshack pelas imagens válidas da versão estática. Parece muito complicado de fazer, mas por esse motivo, não tenho certeza se quero simplesmente remover todos os links do Imageshack do fórum, substituindo-os por uma string vazia ou algo assim.

1 curtida

É a quebra de linha que está causando o problema? Essa seria a minha suposição. Você precisará remapear esses BBCodes para remover a quebra de linha. Replace a string in all posts deve ser útil.

Talvez convertê-los em comentários HTML por enquanto? Você poderia substituí-los mais tarde pelas imagens armazenadas.

2 curtidas

Não parece ser esse o problema:
Adicionei quebras de linha para que o conteúdo fique assim:

[url=https://www.casimages.com/i/1907271141431956116331631.jpg.html]

[img]https://nsm09.casimages.com/img/2019/07/27//1907271141431956116331631.jpg[/img]

[/url]

E o resultado:

Exemplos de posts:

Sim, é uma boa ideia! :+1: Então, basicamente, substituir as strings (do tópico que você linkou) usando expressões regulares para direcionar apenas os links do Imageshack, certo?

2 curtidas

Então, este não é o problema após experimentar com novas linhas.

Mas se eu copiar e colar o conteúdo da postagem em uma nova postagem no mesmo fórum, o conteúdo é exibido corretamente :woozy_face: :question: :


(e também as imagens com link direto são baixadas com sucesso localmente)

Vs:

Tentei refazer a postagem com as imagens quebradas (que são exibidas corretamente na prévia da mensagem, veja minha postagem anterior), mas isso não resolveu nada.

Até onde sei, o conteúdo bruto de ambas as postagens é exatamente o mesmo.

Mas o conteúdo processado da primeira postagem (segunda linha) leva a imagens quebradas:

Estou intrigado.

1 curtida

Odd thing:
If I try to rebuild the HTML of any post, I got an error 500:

Logs show a fatal error and a warning:

Screenshot of the log window:

Fatal error:

ArgumentError (wrong number of arguments (given 0, expected 1)) lib/guardian/ensure_magic.rb:11:in 'method_missing' app/controllers/posts_controller.rb:570:in 'rebake' app/controllers/application_cont

plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
lib/guardian/ensure_magic.rb:11:in `method_missing'
app/controllers/posts_controller.rb:570:in `rebake'
actionpack (6.1.4.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n (1.10.0) lib/i18n.rb:328:in `with_locale'
app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.4.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.4.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.4.1) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.4.1) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.4.1) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.4.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.4.1) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.4.1) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack (6.1.4.1) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.4.1) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.4.1) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.4.1) lib/action_dispatch/routing/route_set.rb:842:in `call'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
actionpack (6.1.4.1) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:358:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.4.1) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.4.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.10.1) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.1.4.1) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.4.1) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/request_id.rb:26:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.4.1) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler (3.0.0) lib/mini_profiler/profiler.rb:249:in `call'
message_bus (4.2.0) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:202:in `call'
railties (6.1.4.1) lib/rails/engine.rb:539:in `call'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `public_send'
railties (6.1.4.1) lib/rails/railtie.rb:207:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

It was in safe-mode with all theme and plugins disabled, but this code block mentions on the first line:
plugins/discourse-chat/lib/guardian_extensions.rb:71:in 'can_rebake?'

Warning:

Failed to handle exception in exception app middleware : ArgumentError : wrong number of arguments (given 0, expected 1)

/var/www/discourse/plugins/discourse-chat/lib/guardian_extensions.rb:71:in `can_rebake?'
/var/www/discourse/lib/guardian/ensure_magic.rb:11:in `method_missing'
/var/www/discourse/app/controllers/posts_controller.rb:570:in `rebake'
actionpack-6.1.4.1/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:228:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:397:in `block in with_resolved_locale'
i18n-1.10.0/lib/i18n.rb:328:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:397:in `with_resolved_locale'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack-6.1.4.1/lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `block in instrument'
activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport-6.1.4.1/lib/active_support/notifications.rb:203:in `instrument'
actionpack-6.1.4.1/lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack-6.1.4.1/lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord-6.1.4.1/lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack-6.1.4.1/lib/abstract_controller/base.rb:165:in `process'
actionview-6.1.4.1/lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:85:in `block in profile_method'
actionpack-6.1.4.1/lib/action_controller/metal.rb:190:in `dispatch'
actionpack-6.1.4.1/lib/action_controller/metal.rb:254:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `each'
actionpack-6.1.4.1/lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack-6.1.4.1/lib/action_dispatch/routing/route_set.rb:842:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
rack-2.2.3/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.3/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.3/lib/rack/head.rb:12:in `call'
actionpack-6.1.4.1/lib/action_dispatch/http/permissions_policy.rb:22:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:358:in `call'
rack-2.2.3/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.3/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/cookies.rb:689:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport-6.1.4.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack-6.1.4.1/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster-2.10.1/lib/logster/middleware/reporter.rb:43:in `call'
railties-6.1.4.1/lib/rails/rack/logger.rb:37:in `call_app'
railties-6.1.4.1/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:23:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/request_id.rb:26:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.3/lib/rack/method_override.rb:24:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/executor.rb:14:in `call'
rack-2.2.3/lib/rack/sendfile.rb:110:in `call'
actionpack-6.1.4.1/lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
rack-mini-profiler-3.0.0/lib/mini_profiler/profiler.rb:249:in `call'
message_bus-4.2.0/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:202:in `call'
railties-6.1.4.1/lib/rails/engine.rb:539:in `call'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `public_send'
railties-6.1.4.1/lib/rails/railtie.rb:207:in `method_missing'
rack-2.2.3/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.3/lib/rack/urlmap.rb:58:in `each'
rack-2.2.3/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/2.7.0/bin/unicorn:25:in `<main>'

Do this information help?
I’m doing what I can to try to repair these posts, but I’m starting to believe this has something to do with Discourse itself and not something on my side maybe? :person_shrugging:


edit: see the automatically linked post below.


Issue resolved:

Now I just have to rebake all my posts. :wink:


Another edit:

Could have worked for sure, and will for images that still have their old plain URL, but:

  • Since all the old Imageshack broken links were replaced by valid images displaying a Ukraine flag by Imageshack itself, they were automatically uploaded to Discourse, changing their URL to a markdown local image link.

  • Fortunately, all these flags were uploaded to Discourse with identical links (![](upload://sOlmOE8qRgLUJ8cCe6N1JNkDV3Y.jpeg) in my case - excellent Discourse behavior by the way :+1:), which means that they will be very easy to target and remove/replace with something else. :slight_smile:

I’m just writing this to inform people that would encounter the same issue as me after a migration.

4 curtidas

Parece que o valor de poll_option_total está incorreto às vezes. Estou vendo mais votos não anônimos por opção do que o valor de poll_option_total. E todos esses usuários existem.

Usar GREATEST(..., 0) corrige isso. Pelo menos, não trava.

        SELECT o.poll_option_id, o.poll_option_text, o.poll_option_total AS total_votes,
          GREATEST(CAST(o.poll_option_total AS SIGNED) - (
            SELECT COUNT(DISTINCT v.vote_user_id)
              FROM #{@table_prefix}poll_votes v
                JOIN #{@table_prefix}users u ON (v.vote_user_id = u.user_id)
                JOIN #{@table_prefix}topics t ON (v.topic_id = t.topic_id)
              WHERE v.poll_option_id = o.poll_option_id AND v.topic_id = o.topic_id
          ),0) AS anonymous_votes
        FROM #{@table_prefix}poll_options o
        WHERE o.topic_id = #{topic_id}
        ORDER BY o.poll_option_id
3 curtidas

Eu realmente quero migrar o fórum phpbb 3.3 da minha empresa para o Discourse. Alguém tem ideia de quando isso será suportado?

1 curtida
3 curtidas

Nossa, que ótimo! Obrigado!

1 curtida

Se eu deveria iniciar um novo tópico para isso, peço desculpas antecipadamente.

Tenho um fórum phpBB em uma subpasta:

thedomain.com/forum/

Estou planejando usar o script de importação para migrar do phpBB para o Discourse em um subdomínio; ou seja:

forum.thedomain.com

Então, parece que tudo que precisarei fazer - para o domínio e os permalinks - é definir o seguinte em settings.yml usando HTTPS no novo site:

site_prefix:
    # isso é necessário para reescrever links internos em posts
    original: thdomain.com/forum    # sem http(s)://
    new: https://forum.thedomain.com       # com http:// ou https://

  # Habilite isso, se você quiser redirecionar links antigos do fórum para os novos locais.
  permalinks:
    categories: true  # redireciona   /viewforum.php?f=1            para  /c/category-name
    topics: true      # redireciona   /viewtopic.php?f=6&t=43       para  /t/topic-name/81
    posts: true      # redireciona   /viewtopic.php?p=2455#p2455   para  /t/topic-name/81/4
    # Anexe um prefixo a cada tipo de link, por exemplo, 'forum' para redirecionar /forum/viewtopic.php?f=6&t=43 para /t/topic-name/81
    # Deixe em branco se o seu fórum não foi instalado em uma subpasta.
    prefix: forum

E então, no servidor original, que executa o Apache, no .htaccess com RewriteEngine já ativado, precisarei:

RewriteCond %{HTTP_HOST} ^thedomain.com
RewriteRule ^forum/(.*)$ https://forum.thedomain.com/$1 [L,R=301]

Se for realmente tão fácil, este script é demais! :grinning:

Tenho algumas perguntas adicionais:

  1. Posts estão definidos como “false” nas configurações de permalink. Sei que existem links para posts específicos por aí, então gostaria que eles também tivessem permalinks. Há alguma razão para não defini-los como true; por exemplo, desempenho ou algo assim?
  2. O prefixo está ok sem aspas simples, ou deve ser entre aspas como no comentário?
2 curtidas

Isso irá desacelerar um pouco a importação, mas você não deve se preocupar com isso. Geralmente está desativado por padrão porque raramente é necessário.

Sim, tudo bem.

2 curtidas

Encontrei um obstáculo enquanto me preparo para esta importação.

O fórum phpBB que planejo migrar está usando um BBcode personalizado que cria tags de imagem HTML para imagens armazenadas em pastas por ano em um diretório fora do phpBB, mas na mesma conta de usuário no servidor. O BBcode tem o seguinte formato:

[Gallery]{NUMBER1}|{NUMBER2}|{NUMBER3}|{SIMPLETEXT}[/Gallery]

O {NUMBER1} e o {NUMBER2} são inteiros para a largura e altura da imagem, respectivamente. O {NUMBER3} é um inteiro para a pasta do ano em que a imagem está, e o {SIMPLETEXT} é o nome do arquivo da imagem. A substituição HTML para o BBcode se parece com isto:

<img class="postimage gallery-image" src="/gallery/files/{NUMBER3}/{SIMPLETEXT}" width="{NUMBER1}" height="{NUMBER2}" />

O que preciso descobrir é como lidar com este BBcode personalizado com o script de migração, tanto para converter o BBcode personalizado em algo que o Discourse possa usar, quanto para descobrir onde colocar os arquivos de imagem na árvore de arquivos para a importação.

Dei uma olhada em Ruby-BBcode-to-MD, que diz que “permite estender facilmente este conjunto com tags personalizadas editando tags.rb”. Dei uma olhada em tags.rb, mas como esta é a primeira vez que olho código Ruby, estou perdido sobre como lidar com meu BBcode personalizado, já que seu formato separado por barras difere de qualquer um dos BBcodes oficiais que o arquivo tags.rb inclui, que eu poderia ter usado como guia.

Eu ainda não tenho templates/import/phpbb3.template.yml carregado, então imagino que isso adicionará o gem Ruby BBcode para MD?

Então tenho perguntas:

  1. Qual é a melhor maneira de lidar com este BBcode personalizado para a migração? Editar o arquivo tags.rb é o caminho a seguir? (Se sim, vou pesquisar um pouco sobre codificação Ruby e talvez regex em seguida, mas quaisquer dicas serão bem-vindas!)
  2. Qual é o melhor lugar para colocar os arquivos de imagem para esta galeria na árvore de arquivos de importação para que sejam salvos no Discourse e apareçam nas postagens importadas?
1 curtida

Essa gem não é mais realmente usada. De qual versão do phpBB você está importando? Se for a v3.1 ou inferior, você precisará aplicar alguma mágica de regex em discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub.

Para a v3.2, você pode adicionar o tratamento de BBCode em discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub

2 curtidas