カスタムインポータソースはどこに保管すべきか?

こんにちは。

WoltlabフォーラムからDiscourseにデータをインポートするためのカスタムインポーターを開発しました。Dockerを使用せずに開発マシン上でDiscourseを直接実行したため、移行コードが含まれるファイルが script/import_scripts/ にいくつかあります。現時点では、公式のDiscourse GitHubリポジトリのフォークにこれらのファイルがあります。

現在、公式のDockerベースのインストールに移行したいのですが、移行はローリング方式で行う必要があるため、しばらくの間インポーターコードを新しいインストールで利用できるようにする必要があります。可能であれば、インポーターコードを別のリポジトリに保持し、クリーンな方法で本番環境のインストールで利用できるようにしたいと考えています。

Railsの知識は限られているため、明白なアプローチを見逃している可能性があります。どなたか正しい方向性を示していただけますでしょうか?

よろしくお願いします。
ハンス

「いいね!」 3

この場合、以下のいずれかをお勧めします。

  1. ローリング移行中に、フォークをベースにインスタンスを作成します。新しい機能を含めたい場合は、フォークを定期的にアップストリームと同期するだけです。移行が完了したら、discourse/discourse に戻します。

  2. Docker 外にリポジトリをクローンし、ファイルをコピーします。再ビルド後に行ってください。そうしないと、プリコンパイル スクリプトがリポジトリをクリーンでないと判断し、ビルドに時間がかかりすぎます。

#1 が最善だと思います。

「いいね!」 4

RGJさん、ありがとうございます!その方法で進めます。

Dockerコンテナ内のリポジトリURLを変更し、インポーターを実行できるようになりました。しかし、./launcher rebuild app を実行したところ、リポジトリがアップストリームにリセットされてしまいました。Dockerfileを確認したところ、リポジトリパスがハードコードされているように見えますが、ベースコンテナがローカルでビルドされているわけではないため、Dockerfileの変更は期待どおりの効果をもたらさないようです。これを機能させるための正規の方法はありますか?

2つのコンテナで作業することをお勧めします。現在の app.yml ファイル(/var/discourse/containers にあります)をコピーして import.yml のような別の名前に変更することで、これを行うことができます。次に、version パラメータをカスタムインポーターブランチに更新します。

params:
  version: your-branch

インポートを実行する必要があるときはいつでも、app コンテナを停止し、import コンテナを開始して、import コンテナ内でスクリプトを実行します。Discourse で大幅な変更が行われた場合は、ブランチをコアの最新コミットでリベースし、コンテナを再構築する必要がある場合があります。

cd /var/discourse
./launcher enter import

# 別のブランチに切り替えたい場合
su discourse -c 'git checkout <branch>'

# 新しいコードをプルしたい場合
su discourse -c 'git pull'

移行が完了したら、インポートコンテナを停止し、アプリコンテナを再起動します。

cd /var/discourse
./launcher stop import
./launcher start app

これらすべてを教えてくれた @gerhard さんに感謝します :backhand_index_pointing_up:

「いいね!」 6

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.