私は通常container_commands
を使用してこの問題を解決します。これは、アプリケーションの.ebextensions
フォルダ内の.configファイルで構成できます。 The idea is that the code is executed on so-called 'leader' instance in your webservers pool. It is not considered as a bulletproof solution but does the job and mostly works (it will fail when autoscaling comes into play though).
ロックを取得したプロセス以外のすべてのプロセスをブロックするには、分散型Mutexロック(redis-mutexまたはデータベースバックアップ)を使用します。
#create config file, use numbers/names that suit your needs:
#.ebextensions/02_container_commands.config
container_commands:
01_cron_tasks:
command: "cat .ebextensions/cron_tasks.txt > /etc/cron.d/yourapp && chmod 644 /etc/cron.d/yourapp"
leader_only: true
cronが、これを選ぶだけで.ebextensions/cron_tasks.txt
ファイルにcrontabの定義を入れて、あなたのGitのレポにも、この1を追加します。
0 5 * * * root bash -l -c "su -m webapp; cd /var/app/current && rake your_rake_task"
それは悲しいですが、Amazon AWSのチームはまだElastic Beanstalkで環境でのRailsでのスケジューリングバックグラウンドジョブのための適切な、便利なソリューションを考え出すていなかったようです。 Worker Tierでは、独自のcron実装からのメッセージをリッスンする専用のエンドポイントをアプリケーションに追加する必要があります。これは、ホスティング固有のコードをコアアプリケーションロジック(ルート、コントローラ)に追加する必要があり、さらに多くのサーバーを実行する必要があるため、悪いことです。
Herokuのようなプラットフォームと比較した場合のAWSのもう一つの欠点は、SidekiqのようなRedisでサポートされているキューイングシステムと、cronのようなスケジューラを使って生成できるオンデマンドワーカーに対するワンクリックサポートの欠如です。
Railsに精通しているわけではありませんが、何か助けになるかもしれません。https://github.com/collectiveidea/delayed_job – error2007s
これは私を近くにしますが、私の仕事は一定の間隔で実行するように設定する必要があります毎分午後11時など) – jfefes
RDSのバージョンについては言及していませんが、MySQLまたはMariaDBの場合、組み込みの[イベントスケジューラ](https://dev.mysql.com/doc/refman /5.6/en/event-scheduler.html)... –