bbPressの画像とリンクをDiscourseに301リダイレクトでインポートする方法

こんにちは。

bbpress.rb スクリプトを使用して、bbPress のすべてのコンテンツを Discourse の「開発環境」に転送しました。

しかし、2 つの質問があり、お手伝いいただけると幸いです。

1: すべての画像が Discourse 上で「/wp-content/uploads/img_644e48aedc2bf.jpg」というパスで表示されます。これは bbPress のメディア URL パスと同じです。画像をインポートして、Discourse の期待されるパスに移動させるにはどうすればよいですか?

2: bbPress のデフォルトのパーマリンクは「www.demo.com/%postname%/」のようになっていました。bbPress は SQL でも「www.demo.com/?p=123」というパーマリンクを使用しています。
bbpress.rb コードを編集して、古いリンクをインポートし、後で問題なく新しい Discourse リンクに 301 リダイレクトするにはどうすればよいですか?
ユーザーが古いサイト www.demo.com/%postname%/ にアクセスしようとすると、リンクが新しい https://my-discoursexxxx.com/t/1234/%postname% に 301 リダイレクトされるようにしたいです。

これらの質問について、手を貸していただけますか?

こんにちは。

1についてですが、bbpressスクリプトを変更して、アバターをフォルダからコピーし、Discourseインスタンスにアップロードする必要があります。その方法については、vbulletinインポートスクリプトの212行目を参考にしてください。

2については、Discourseは外部ウェブサイトのデータ(http://www.demo.comなど)にアクセスできないため、もう少し複雑になります。そのため、同じドメインを維持し、create_permalinks(379行目)関数にpostnameパラメータをサポートするためのいくつかの小さな変更を加えるのが最善の方法となります。

「いいね!」 1

投稿内の画像を指しているのであれば、「リモート画像をローカルにダウンロード」が設定されていれば、Discourseがそれらをダウンロードします。それを実行するためのSidekiqジョブがあるはずです。

「Permalink」については、他のスクリプトを確認できます。

要するに、p=123 の値は TopicCustomFields または PostCustomFieldimport_id という名前で保存され、その後スクリプトを実行してパーマリンクを作成できます。

「いいね!」 1

数分前、「リモート画像をローカルにダウンロードする」を有効にし、すべての画像をローカルサーバー「bbPress」にダウンロードしました。Discourseがインポート中にそれらをダウンロードできるようにするには、Sidekiqジョブをどのように有効にしますか?

ご迷惑をおかけして申し訳ありませんが、すべてのリンクを次のようにリダイレクトするにはどうすればよいですか?

www.old.com/%postname%/

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

%postname%/ は同じではないと思います

ジョブが完了するのを待つだけです。スクリプトを変更して、実行時にアップロードを処理するようにしたい場合は、それを行う他のスクリプトを参照してください。

パーマリンクを作成する他のスクリプトを参照できます。vbulletin.rb にパーマリンクの例があります。

既存の bbpress.rb はデータベース内の添付ファイルを処理するため、ユーザーが直接リンクしているか、そのようなものがあるはずですか?そのため、正規表現で見つけて、他のアップロード関数と同じように処理する必要があります。Discourse が処理している場合は、おそらくそのままにしておくのが良いでしょう。

「いいね!」 1

@pfaffman @nizar9 ありがとうございます。

コントロールパネルで download remote images 機能を有効にすることで、古いbbPressの記事からDiscourseにすべての画像を保存および転送することができました。

しかし、:cry: 古いbbPressのリンクを次のように301リダイレクトするのにまだ苦労しています。

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

新しいリンクに

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

そして、同じトピックの新しいIDが何であるかわからないため、htaccess正規表現では問題を解決できません。

インポートスクリプトがデータをダンプして、それを可能にするものが少なくとも1つあります。前述したように、Discourseで問題を解決するためにPermalinkリダイレクトを作成することは可能です。

bbPress から Discourse への画像のインポート、
以下に bbpress.rb スクリプトの例を示します。
このスクリプトは、アバター画像を bbPress ディレクトリからコピーし、Discourse インスタンスにアップロードします。

# bbpress.rb

# bbPress アバターをインポートして 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

# 関数を呼び出す
import_avatars

適切な URL を生成し、301 リダイレクトを処理する create_permalinks 関数を作成してください。

# bbpress.rb

# postname パラメータを使用してパーマリンクを作成し、リダイレクトを処理する
def create_permalinks
  permalinks.each do |permalink|
    topic_id = permalink['topic_id']
    postname = extract_postname_from_permalink(permalink['url']) # postname を抽出するためにこの関数を実装してください

    topic_link = "https://my-discoursexxxx.com/t/#{topic_id}/#{postname}" # 正しい URL 構造でこの行を変更してください

    create_discourse_permalink(topic_id, permalink['url'], topic_link)
    create_redirect(permalink['url'], topic_link) # 301 リダイレクトを作成するためにこの関数を実装してください
  end
end

# 関数を呼び出す
create_permalinks

create_redirect 関数は、古い bbPress パーマリンクから新しい Discourse URL への 301 リダイレクトを追加する必要があります。
注: パスを必要に応じて置き換えてください。

うまくいくことを願っています。

「いいね!」 1

アップロードには使えません。Discourse はすべて新しい名前を付けます。画像リダイレクトが必要だとは気づきませんでした。そんなことを頼む人は見たことがありません。

Discourse と bbpress が偶然同じスラッグを使用しているトピックでは機能するかもしれません。