マイグレーションスクリプト実行後のリセット?

バニラ3フォーラムをセルフホストのDiscourseに移行するために移行スクリプトを使用しています。

移行スクリプトは正常に動作しています。
RAILS_ENV=production ruby script/import_scripts/vanilla.rb /shared/uploads/export.text

唯一の問題は、エクスポート後に再度インポートできないことです。インポートスクリプトは2回目に正常に実行されますが、インポートファイルに対して行ったデータ変更は適用されません。また、2回目の実行ではインポーターの実行速度が約50倍になり、実際には何もインポートしていないのではないかと疑っています。

質問:最初の実行後に、/var/www/discourse/script/import_scripts/ にあるインポートスクリプトを再実行する方法はありますか?

具体的には、インポートファイルの形式のバグを修正する際に、投稿とディスカッションの更新のみを行うために再インポートできるようにしたいと考えています。

これまでのところ、見つけた唯一の解決策は、Discourseのインストール全体を削除して最初からやり直すことですが、毎回1時間近くかかります。

何かヒントはありますか?

以下は、vanilla.rbからの関連コードです。

  def import_posts
    puts "", "importing posts..."

    create_posts(@comments) do |comment|
      next unless t = topic_lookup_from_imported_post_id("discussion#" + comment[:discussion_id])

      {
        id: "comment#" + comment[:comment_id],
        user_id:
          user_id_from_imported_user_id(comment[:insert_user_id]) || Discourse::SYSTEM_USER_ID,
        topic_id: t[:topic_id],
        raw: clean_up(comment[:body]),
        created_at: parse_date(comment[:date_inserted]),
      }
    end
  end

私はプログラマーですが、Rubyプログラマーではありません。このコードを変更して、再インポートした場合に投稿の内容を置き換えるようにする方法はありますか?

Vanilla のインポートファイルをクリーンアップするパーサーを改善しているので、特定の投稿で発生するエラーに焦点を当てています。

そのため、パーサーを改善するにつれて、デバッガー(ちなみに Xojo を使用しています)でパーサーを停止し、生のテキストを取得できます。

その後、ライブの Discourse フォーラムで、新しい投稿を追加し、テキストを貼り付けて、どのように表示されるかを確認できます。

これにより、1 時間ほどかかるのではなく、数秒でテスト/デバッグ/変更のサイクルを実行できます。

私の新しい計画:パーサーのクリーンアップに満足したら、Discourse を削除して最初から再インストールします。

それは意図的にそのように機能します。アイデアは、今インポートを実行し、その後別のインポートを新しいダンプで実行すると、新しいデータのみをインポートするため非常に高速に実行されるということです。

最初からやり直すには、データベースをドロップ、作成、および移行する必要があります。

ユーザーが多い場合は、ユーザーがインポートされた後にスクリプトを停止し、バックアップを作成してから、修正を試す前にそのバックアップを復元することができます。

「いいね!」 1

それは完全に理にかなっています。説明してくれてありがとう。 「強制上書き」を設定できるフラグがあればいいのですが、コードを少し調べましたが、明白なものは見つかりませんでした。

それを簡単に行う方法はありますか?見つけた唯一の解決策はこれらのコマンドですが、これらは基本的に、新しいDockerのインストールを開始するのと同じです。

# 警告: これらのコマンドは、Discourseフォーラム全体を削除します。
cd /var/discourse
sudo ./launcher stop app
sudo rm -rf /var/discourse/shared/standalone
sudo ./launcher rebuild app

約10分しかかかりませんが、その後、初期設定を再度行う必要があります。これは面倒です。

それは素晴らしいアイデアです!新鮮なインストール後にバックアップを作成し、インポートスクリプトを実行する前にバックアップを作成することもできます。ユーザー/トピック/投稿/コメントの再インポートは非常に高速であり、このフォーラムは一般公開されていません。

sv stop unicorn
rake db:drop db:create db:migrate

データベースを削除するには環境変数を設定する必要がありますが、それは指示されます。