0

Railsは初めてで、DelayedJobsは非常に新しいです。

5分後にトリガーされるはずの1つを手に入れました。私はついにそれを動作させるようになりました

rake jobs:work

私の端末では、ジョブが起動して正しく機能します。CTRL-Cを実行してターミナルでそのアクションを終了すると、遅延ジョブは正しく機能しなくなります。これは、ローカルサーバーとHerokuでの問題であり、遅延ジョブを使用して起動する必要があります。

heroku run rake jobs:work

新しいHerokuツールベルトを調べて、ワーカーのメンテナンス用に提案されたgem、フォアマンをダウンロードしましたが、「フォアマンスタート」を実行すると、このエラーが発生します。

ERROR: procfile does not exist

procfileが何であるかわかりません。delayed_jobsアクションのデバッグにかなりの日を費やした後、物事を壊すのが怖いので、壊れてしまうハッキーな修正を見つけるのではなく、正しく機能することを確認したいと思います。後で-それで私はこの質問をするべきだと思いました、しかしそれは不愉快に漠然としているかもしれません。

これにはフォアマンを使用する必要がありますか?または無力?(別のSOの質問でそれを見ました)。私のprocfileはどこにありますか?私はそれで何かをすべきですか?

ありがとう、

サーシャ

4

2 に答える 2

2

を使用procfileして Heroku プロセスをセットアップする必要があります。これは、Heroku がプロセスを定義および制御するために使用する標準的な方法です。

ここまでa を使用していなくてprocfileも、Heroku は Rails アプリをプッシュするときにwebworkerプロセスの両方を含むいくつかのデフォルト プロセスを追加するため、おそらくすべてが機能します。デフォルトのworkerプロセスは遅延ジョブに設定されています。

Foreman は、同じアプローチを使用するようにローカル マシンをセットアップするために開発されましたが、Heroku サービスとは異なり、Foreman は実際には、Foreman の開始時に開始されるサービスを制御するために procfile が存在する必要があります。デフォルトを設定します。

procfileプロジェクトのルート ディレクトリに を作成して、ローカル マシンでも Heroku と同じようにプロセスがセットアップされ、動作するようにすることをお勧めします。Heroku が自動的にセットアップするものを模倣したい場合は、procfile(Heroku が推奨する) Thin Web サーバーを使用しているかどうかに応じて、以下を に追加します。

Gemfile で Thin を使用する場合:

web: bundle exec thin start -R config.ru -e $RACK_ENV -p $PORT
worker: bundle exec rake jobs:work

特別な Web サーバーがない場合 (たとえば、レールのデフォルトである webrick を使用している場合):

web: bundle exec rails server -p $PORT
worker: bundle exec rake jobs:work

このファイルを配置したら、ローカル マシンで foreman を実行できます。これにより、Web サーバーとdelayed_job ワーカーが自動的に開始されます。

このプロセスの実行は、ローカル マシンでのdelayed_jobの開始にのみ影響します。現在使用しているものとまったく同じコマンドbundle exec rake jobs:workを実行しているため、ローカルまたは Heroku での dj アクションへの影響はありません。明らかに、これが実際に当てはまることを確認するには、いくつかのテストが必要です。

Workless は、Heroku でワーカーをスケーリングするように設計されているため、利用可能な作業がない場合に料金を支払う必要はありません。procfiledj ワーカー プロセスを実際に開始する方法や定義には関係ありません。

于 2012-10-18T12:37:31.117 に答える
-1

私の知る限り、delayed_job には 2 つのバージョンがあります。

  1. オリジナル(tobi's) https://github.com/tobi/delayed_job
  2. collectiveidea のフォーク: https://github.com/collectiveidea/delayed_job

collectiveidea バージョンを使用する場合は、以下のように開始する必要があります。

# Runs two workers in separate processes.
$ RAILS_ENV=production script/delayed_job -n 2 start

Heroku のdelayed_job についてはよく知らないので、その指示に従ってください。

于 2012-10-18T01:15:06.417 に答える