Ruby on Rails のバックグラウンド ジョブ、rake タスク、cron ジョブの違いは何ですか?

概要

私は Rails での rake タスクと cron ジョブの探索を始めたばかりです。それらを比較して、どの状況であなたに何を与えるのかについて混乱しました。私の知る限り、バックグラウンドジョブはアプリケーションの実行中に生成されるもので、タスクはコマンドラインを通じて実行するものです。 cronjob を使用してユーザー レコードを作成しているとします。これは、単純なタスクだけでなくバックグラウンド ジョブでも行うことができます。 知識を共有していただければ幸いです。

解決策

Rake タスクは、Rake DSL を使用して Ruby で実装された単なるスクリプトまたは小さなプログラムです。 Ruby on Rails アプリケーションのコンテキストでは、Rake は伝統的に、何かを「構築」するタスクや依存関係を管理するために使用されます。一般的な例としては、データベースの移行、一時ファイルのクリーンアップ、バックアップ、展開などがあります。ただし、一般に、rake タスクは、データ移行、電子メールのトリガーなど、アプリケーション関連も含め、ほぼすべての用途に使用できます。

Cron ジョブは、Unix 系オペレーティング システム上のジョブ スケジューラです (Wikipedia を参照)。これは、特定の時間 (毎日 12:00 や毎月 1 日など) または特定の間隔 (10 分ごと) で繰り返しジョブを開始するために使用されます。 Cron は単なるスケジューラであり、Rake タスク、データベース バックアップ、システム チェックなど、あらゆる種類のコマンド ライン スクリプトを特定の時間に開始できます。

Ruby on Rails のバックグラウンド ジョブは通常、ActiveJob または Sidekiq を使用して実装されます。ジョブを特定の時間に実行するか、作成時にすぐに実行するようにスケジュールできます。これらは Rake や Cron よりもアプリケーションに近く、Ruby on Rails クラスを使用してアプリケーションに直接実装されます。ユーザーによってトリガーされるタスクがあり、Web リクエストには時間がかかりすぎるが、代わりに非同期で実行できるタスクがある場合は、バックグラウンド ジョブを使用します。たとえば、電子メールの送信、外部 API からのデータの取得、ユーザーによるデータ変更後の複雑な計算の実行などです。もう 1 つの使用例は、失敗する可能性があり、数回再試行する必要があるタスクの場合です。

Tl;dr Rake タスクを使用します – アプリケーションを管理するための小さなスクリプトを作成する場合。スクリプトまたはタスクを定期的に実行する場合は、Cron タスクを使用します。バックグラウンド処理を使用してアプリケーション内のタスクを非同期に実行し、Web リクエストを高速化します。