Migrate a phpBB3 forum to Discourse

Markdownも機能するはずですが、<strong>を使用すると、さらに多くのエッジケースを回避できると思います。HTMLとMarkdownの混在にも注意点があります…これは単純なMarkdownソリューションです。

**複数行\
\
テキスト**

phpBBのどのバージョンからインポートしていますか? BBCodeからMarkdownへの変換は、以前のバージョンよりも3.2の方がはるかに優れています。理想的には、インポートされた投稿に[b]が表示されることはもうないはずです。

「いいね!」 2

そうだと思います。なぜ最初にそれを考えなかったのか分かりません…

phpBB 3.0.7-PL1から移行しています。

「いいね!」 2

インポート前に3.2にアップグレードすると、ご自身にとって大きなメリットがあります。:wink:

phpBBリパーサーを実行して、すべての投稿のBBCodesが新しいストレージ形式に移行されていることを確認してください: https://www.phpbb.com/support/docs/en/3.3/kb/article/phpbb-32%2B-text-reparser/

「いいね!」 3

最初はそのことも考えましたが…コンピューター関連は苦手なんです :sweat_smile:
phpBBに詳しくないので、古いバージョンからのアップデートで発生する可能性のあるエラーに対処したくありませんでした。

Discourseの移行スクリプトはphpBB 3.0と互換性があるので、phpBBのアップグレードはしないことにしました…
もしかしたら、phpBBをアップグレードしていれば、遭遇した一部のbbcodeの問題は回避できたかもしれません。ネストされたリストや、改行を含む[b]タグなどです… :man_shrugging:

しかし、12月にインポート作業を開始してから、うまくいくインポートにかなり近づきました(理想的には、新しいフォーラムは2週間ほどでオンラインになるでしょう…)。そのため、特にphpBB 3.2インポーターがこれらの問題をより良く処理できるかどうかを確認するために、今すぐphpBBのアップデートを試す気にはなれません :sweat_smile: 。時間がかかります。

とはいえ…もし十分に退屈したら、この週末午後にでも試してみるかもしれません!


編集:試してみました。新しいサーバーに移行してからphpBB 3.2にアップグレードするのは面倒です。HTTPSの問題。キャッシュの問題。その他の問題。複雑でイライラする手順。公式チュートリアルでは、古いPHPバージョン(こんにちは、PHP 5、久しぶり…)を必要とするツールを使用することが推奨されています。どうやら、私は時々退屈しますが、狂ってはいません - 少なくともこのようなことをするほどではありません。

Gerhardさん!あなたは誤解を招いています!3.2へのアップグレードは大きなメリットではありません! :laughing:

しかし、phpBB自体についての話はこれくらいにして… Discourseのワンクリックアップグレードを称賛しましょう。

「いいね!」 1

こんにちは。

WordPressユーザーをDiscourseに移行しようとしています。WPデータベースに接続し、Dockerコンテナにユーザーをインポートする手順に従うことができました。SSO WordPressプラグインを使用しているため、移行中または移行後にメールが送信されないことを確認したかったのです。

メールには「import_」という接頭辞を付けたので、移行完了後にバックグラウンドタスクが確認メールを送信した場合でも、それらを受信しないようにしました。

移行後にlast_emailed_at列が設定されていることがわかります。

これは、ImportScripts::Base::create_user()内のopts[:last_emailed_at] = opts.fetch(:last_emailed_at, Time.now)によって設定されることを知っています。

ImportScripts::Base::create_adminで使用されている、メールを確認するadmin.email_tokens.update_all(confirmed: true)のような関数はありますか?

メール送信を示すログは表示されません。実際にメールは送信されましたか?メールを有効なものに変更した後、Discourseはメールを送信しようとしますか?

「いいね!」 1

これは話題がずれています。このトピックはphpBB3の移行についてです… :wink:

メールが絶対に送信されないようにしたい場合(例:foo@mywpimport.invalid)、.invalidドメインを使用することをお勧めします。しかし、準備ができるまで送信メールを無効にしたいだけであれば、disable_emailsサイト設定を「yes」または「non-staff」に設定するのが最善の方法です!

送信メールはインポート中に自動的に無効になります。last_emailed_at属性の値は、Discourseが送信を許可されていないことを発見する前に、メールを送信しようとした試みによるものと思われます。

Discourseは移行後に間違いなくメールを送信しようとします。

「いいね!」 2

ありがとうございます。最初にメールフィールドに空文字列を試したところ、ImportScriptの基底クラスが不正なドメインを持つ偽のメールを生成しました。また、それらにはlast_emailed_at属性が設定されていました。

つまり、データベースのメールを修正するとすぐに、Discourseはメールを送信しようとするということですか?しかし、WordPressで認証された通常のサインオンではメール確認は必要ありません。ImportScriptではそれを回避する方法はありませんか?

「いいね!」 1

移行は完了し、成功しました。
ただし、2つの問題が発生しています。トピックから外れている場合はお知らせください。

  1. 一部の投稿コンテンツには、次のようなコンテンツが含まれています。

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

    画像はプレビューでは表示されますが、HTMLを再構築しても、投稿自体では壊れています。

    各画像の生成されたHTMLは次のとおりです。

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

    多くの投稿でこの問題が発生しています。グローバルに修正する方法はありますか?

  2. 多くの古いフォーラムと同様に、古いImageshackリンクは長い間壊れており、永遠に壊れています。しかし、一部のリンクは、何も表示されない代わりに、ウクライナの国旗を表示するようになりました。

    この動作をどのように処理しますか?
    どのようなアイデアでも歓迎しますが、フォーラムの管理者は古いハードドライブにフォーラム全体の静的バックアップを持っており、そこではほとんどの古い画像が有効です(ダウンロードしてローカルに保存されています)。将来的には、Imageshackの「デッド」リンクを静的バージョンから有効な画像に置き換えるスクリプトを作成できるかもしれないと考えています。これは非常に難しいように思えますが、この理由から、Imageshackリンクを空の文字列などに置き換えて単純に削除したくはありません。

「いいね!」 1

改行が問題の原因でしょうか?それが私の推測です。それらのBBCodesを再マッピングして改行を削除する必要があります。Replace a string in all posts が役立つでしょう。

とりあえずHTMLコメントに変換してみてはどうでしょうか?後で保存された画像に置き換えることができます。

「いいね!」 2

問題ではないようです。
コンテンツが見た目通りになるように改行を追加しました。

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

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

[/url]

そして結果は以下の通りです。

投稿例:

はい、それは良いアイデアです!:+1: つまり、リンクされたトピックの文字列を、Imageshackリンクのみを対象とする正規表現で置き換えるということですね?

「いいね!」 2

したがって、新しい行を試した結果、これは問題ではありませんでした。

しかし、投稿の内容を同じフォーラムの新しい投稿にコピーして貼り付けると、コンテンツは正しく表示されます:woozy_face: :question: :


(ホットリンクされた画像もローカルに正常にダウンロードされます)

対照的に:

壊れた画像(前の投稿で正しく表示されている)の投稿を再ベイクしてみましたが、何も修正されませんでした。

私の知る限り、両方の投稿の生のコンテンツはまったく同じです。

しかし、最初の投稿(2行目)の調理済みコンテンツは壊れた画像につながります:

困惑しています。

「いいね!」 1

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

poll_option_total の値が時々ずれているようです。オプションあたりの非匿名投票数が poll_option_total の値よりも多くなっています。そして、これらのユーザーはすべて存在します。

GREATEST(..., 0) を使用すると解決します。少なくとも、クラッシュしなくなります。

        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

phpbb 3.3 フォーラムを Discourse に移行したいのですが、いつサポートされるかご存知の方はいらっしゃいますか?

「いいね!」 1
「いいね!」 3

おお、それは素晴らしいですね!ありがとうございます!

「いいね!」 1

新しいスレッドを開始する必要がある場合は、事前にご了承ください。

サブフォルダにphpBBフォーラムがあります。

thedomain.com/forum/

phpBBからDiscourseにサブドメインで移行するためにインポートスクリプトを使用する予定です。つまり、

forum.thedomain.com

したがって、新しいサイトでHTTPSを使用する場合、ドメインとパーマリンクに必要なのは、settings.ymlで以下を設定することだけのように思われます。

site_prefix:
    # this is needed for rewriting internal links in posts
    original: thdomain.com/forum    # without http(s)://
    new: https://forum.thedomain.com       # with http:// or https://

  # Enable this, if you want to redirect old forum links to the the new locations.
  permalinks:
    categories: true  # redirects   /viewforum.php?f=1            to  /c/category-name
    topics: true      # redirects   /viewtopic.php?f=6&t=43       to  /t/topic-name/81
    posts: true      # redirects   /viewtopic.php?p=2455#p2455   to  /t/topic-name/81/4
    # Append a prefix to each type of link, e.g. 'forum' to redirect /forum/viewtopic.php?f=6&t=43 to /t/topic-name/81
    # Leave it empty if your forum wasn't installed in a subfolder.
    prefix: forum

そして、元のサーバー(Apacheを実行している)では、RewriteEngineがすでにオンになっている.htaccessに、以下が必要になります。

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

本当にそれだけで簡単なら、このスクリプトは素晴らしいです!:grinning:

さらにいくつか質問があります。

  1. パーマリンク設定では、投稿は「false」に設定されています。特定の投稿へのリンクがいくつかあることはわかっているので、それらもパーマリンク化したいと思います。パフォーマンスなどの理由で、trueに設定しない理由がありますか?
  2. プレフィックスはシングルクォートなしで問題ありませんか、それともコメントのように引用する必要がありますか?
「いいね!」 2

インポートがわずかに遅くなりますが、心配する必要はありません。ほとんど必要とされないため、デフォルトでは無効になっています。

はい、大丈夫です。

「いいね!」 2

インポートの準備をしている際に問題が発生しました。

移行を計画している phpBB フォーラムは、phpBB の外部にあるがサーバー上の同じユーザーアカウントにあるディレクトリに年別に保存された画像用の HTML img タグを作成するカスタム BBCode を使用しています。BBCode は次の形式をとります。

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

{NUMBER1}{NUMBER2} はそれぞれ画像の幅と高さの整数です。{NUMBER3} は画像が格納されている年フォルダの整数であり、{SIMPLETEXT} は画像ファイル名です。BBCode の HTML 置換は次のようになります。

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

私が理解する必要があるのは、移行スクリプトでこのカスタム BBCode をどのように処理するか、カスタム BBCode を Discourse が使用できる形式に変換すること、およびインポートのために画像ファイルをファイルツリーのどこに配置するかということです。

Ruby-BBcode-to-MD を確認しました。これは「tags.rb を編集することで、カスタムタグで簡単に拡張できます」と述べています。私は tags.rb を確認しましたが、Ruby コードを見るのは初めてなので、tags.rb ファイルに含まれている公式の BBCode とは異なるパイプ区切りの形式を持つカスタム BBCode をどのように処理すればよいかわかりません。ガイドとして使用できたかもしれません。

まだ templates/import/phpbb3.template.yml をロードしていないので、これにより Ruby BBcode to MD gem が追加されると推測していますか?

したがって、質問があります。

  1. このカスタム BBCode を移行のために処理する最善の方法は何ですか? tags.rb ファイルを編集するのが良い方法ですか? (もしそうなら、Ruby コーディングと正規表現についてもう少し調査するつもりですが、ヒントがあれば歓迎します!)
  2. インポートファイルツリーのギャラリーの画像ファイルを、Discourse に保存され、インポートされた投稿に表示されるように配置するのに最適な場所はどこですか?
「いいね!」 1

そのgemはもうあまり使われていません。phpBBのどのバージョンからインポートしていますか?v3.1以前の場合は、discourse/script/import_scripts/phpbb3/support/text_processor.rb at ea2fd75d10e81687334f8d29e0d3e786dbdb4a53 · discourse/discourse · GitHub で正規表現のマジックを適用する必要があります。

v3.2の場合は、discourse/script/import_scripts/phpbb3/support/bbcode/xml_to_markdown.rb at a71b219c9a18ad418e330282fde511bcb79ba7c4 · discourse/discourse · GitHub でBBCodeの処理を追加できます。

「いいね!」 2