私は、その時に送信されるはずの電子メールについて毎分データベースをチェックするアプリケーションを持っています。私はこれを毎分cronジョブによって実行されるレーキタスクにすることを考えていました。これにはもっと良い解決策がありますか?1分ごとに実行されるメーラー用のベストレールソリューション
レーキはレール環境全体を1分ごとにロードする必要があり、これは高価になるため、これは理想的ではありません。
思考?
ありがとうございました。
私は、その時に送信されるはずの電子メールについて毎分データベースをチェックするアプリケーションを持っています。私はこれを毎分cronジョブによって実行されるレーキタスクにすることを考えていました。これにはもっと良い解決策がありますか?1分ごとに実行されるメーラー用のベストレールソリューション
レーキはレール環境全体を1分ごとにロードする必要があり、これは高価になるため、これは理想的ではありません。
思考?
ありがとうございました。
backgroundrb
を使用できます。しかしこれは、メインのRailsアプリからメモリを奪い、backgroundrb
に1つのRubyインスタンスを生成します。SystemController
(または同等のもの)を定義して、アプリケーションで実行するさまざまな家計タスクに対応するさまざまなアクションを定義することもできます。 wget
またはcurl
を使用してcrontab
からプロデュースすることができます。これは、メインアプリケーションとリソースを共有するという利点があります。このようなコントローラをおそらく外界に暴露するDOSやその他の攻撃に対して、どのような影響を受けるのかによって、コントローラのURLへのアクセスは、ループバック以外のアドレスからブロックすることができます(代わりに、コントローラ自体から、リバースプロキシで。)理想的に私は、ヴラドは光栄ローカル要求だけで、(#2)提案何、と私はまた、特定のクエリ文字列は、上のタック必要とするほど偏執的ですURLに。
私はこのようにいくつかの定期的なアクションを設定しています。
一つは本当に簡単な方法は、あなたは常にRailsの環境を再生成されていないこと
while true do
check_and_send_messages()
sleep 60
end
..which ..行うスクリプトを持っているだろう。
明らかにそれは様々な欠陥を持っていますが、また、いくつかの利点があり、(1-レーキは、毎分、それはrakeタスク1分以上かかりますあなたと、例えば、レーキは、一度に複数回実行されます)
また、(彼らはまさにこの作業を記述している)RailscastsはRake in Background、Starling and Worklingをエピソード、そしてCustom Daemonはあなたにいくつかのアイデアを与えるかもしれない
それはちょうどこのために構築された何か実際にありますが判明:ar_mailerが。 ar_mailerは、電子メールをDBにキューイングし、ar_mailerコマンドを使用して定期的に送信します。毎分ar_mailerを呼び出すことができます。
ar_mailerの素晴らしい点は、基本的に電子メールを送信する方法に関しては、ほとんど変更を必要としないことです。 ActiveMailerではなくar_mailerから継承する必要があります。この方法を使うと、バックグラウンドでレイクタスクを実行したり、プロセスをフォークしたりすることを心配する必要がなくなり、実際にメールが送信されたときに削除されるキューに入れられたメッセージを持つ実際のメールサーバーが得られます。この機能は、多数の電子メールを送信するシステムを持っている場合に重要です。私はソーシャルネットワークを構築するためにar_mailerを使用しました。そのため、私はその堅牢性を証明することができます。
Here's a good article that talks about ar_mailer in depth。エリックはこの問題を解決するために時間を要したソリューションを構築しているので、ここでは自分のソリューションを導入することを強くお勧めします。