カスタム Ruby スクリプトの実行

レールコンソールを使用して目的のタスクを実行できます。しかし、これらのタスクは定期的に実行する必要があり、各コマンドをレールコンソールに一つずつ入力したくありません。セルフホストのDiscourseインスタンスでRubyスクリプトを実行するにはどうすればよいですか?

さらに、スクリプトはCSVファイルを読み取ります。このCSVファイルをDockerコンテナ内でアクセス可能であり、アップデート後も消えないようにするにはどこに配置すればよいですか?

1つのアプローチは、ファイルをアップロードしてから、そのURLを設定に保存することです。ファイルをアップロードすると、削除されるのを防ぐことができます。

プラグインでジョブを実行できます。DiscourseおよびPavilionプラグインには、ジョブの例がたくさんあります。

「いいね!」 1

最初に説明したよりもユースケースは単純かもしれません。通常は次のように行います。

./launcher enter app
rails c

> u= User.find(1)
> some more code here

やりたいことは次のとおりです。

./launcher enter app
./my_code.rb

ここで、my_code.rb には、以前に rails コンソールで実行した内容が含まれています。

「タスクを定期的に実行したい」と述べました。

それが「コミュニティの存続期間」を意味するのであれば、独自のプラグインを作成する価値があります。これは、Railsコンソールに入るよりも(乱雑でリスクが高い!)それほど難しくありません。

また、コードを保存して適切に管理し、時間をかけて改良することもできます。

あるいは、rakeタスクを定義することもできますが、それをどこかに保存する必要があります。おそらくプラグイン内にも!

「いいね!」 2

はい、言葉の選択が悪かったです。私が意味したのは次のとおりです。コミュニティの存続期間中にこのジョブを複数回実行する必要があります。ただし、固定された期間はなく、実行する必要がある時期は外部イベントによって決定されます。そのため、一定の間隔なしに自分でタスクを複数回実行することになります。

したがって、rake タスクが最適なソリューションになる可能性があります。これは、アドホック スクリプトの実行専用に設計されています。それでも、プラグインに入れることをお勧めします。そうすれば、GitHub できれいに管理でき、どこに置いたかを忘れたり、誤って削除したりすることはありません。

以下に多くの例を示します。 discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

「いいね!」 2

/sidekiq から手動で開始する必要があるジョブ、または rake タスクにすることができます。

UX から CSV をアップロードして、設定値として渡すか、トピックにアップロードしてスクリプトで最新の投稿/アップロードを取得するか、/var/discourse/shared/standalone/xxx.csv にアップロードしてスクリプトで /shared/xxx.csv としてアクセスするか、いずれかの方法で行うことができます。あるいは、CSV ファイルをアップロードするのではなく、API を使用して全体を行うべきかもしれません。

何を行おうとしているのか説明されておらず、最善ではない可能性のある解決策しか説明されていません。