問題タブ [laravel-horizon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
laravel - Laravel Horizon:同じサーバー上の複数のインスタンスが互いに干渉している
Horizon を使用する必要がある 3 つの Laravel アプリがすべて同じサーバー上で実行されています。
クラッシュとジョブが実行されないアプリで問題が発生しました。
Medis を使用して Redis データベースを調べたところ、ジョブごとに 3 つのエントリがあることがわかりました。
- PRODUCTION_horizon:2
- STAGING_horizon:2
- HRS_horizon:2
ここproduction
で、staging
とhrs
はアプリケーション名で、2
はジョブの ID です。
ジョブがディスパッチされた場合でも、またはstaging
によってピックアップされ、ステージングのために保留中のままで、実際に実行されることはありません。production
hrs
多くの検索の後、すべてのキューにアプリ名をプレフィックスとして付けることで、これを回避する方法を見つけました。
だから私の設定はこれから変更されました:
これに:
これで実際に動くようになりました!だから本質的に私はそれを修正しました。
しかし、これは本当に間違っているように感じます。
今、私がしなければならない特定のキューにジョブをディスパッチするときMyJob::dispatch()->onQueue(config('app.name') . '_emails');
これは明らかに理想的ではありません。
もっと良い方法があるに違いないと思いますが、これを行う方法を説明しているドキュメントには何もありません。
地平線が互いに干渉するのを止める方法はありますか? 多分私は複数のRedisデータベースか何かを使うべきですか?
すでに解決策を見つけたものの質問を投稿するのは奇妙に思えるかもしれませんが、やみくもに質問する前に自分で試して修正したいと思いました。私が知らないだけの簡単な解決策。最悪の場合、より良い解決策がない場合、同じ問題を抱えている他の誰かがこれを見つけて私の解決策を発見するでしょう。
laravel - Laravel Horizon ジョブの半分が失敗する
サーバーに laravel Horizon をセットアップしましたが、ジョブの半分が次のエラーで失敗していることがわかりました。
なぜこれが起こっているのかわかりませんが、私のローカル環境ではキューが正常に機能しています。誰もがこれらの問題に遭遇しましたか
コードは次のとおりです。
コールディスパッチメソッド
ジョブクラスを呼び出す
通知クラスを呼び出す
laravel - スーパーバイザーで Horizon を起動する場合にのみ、Laravel プッシャーが失敗する
これについて正しい情報を提供するのは難しい。何日もそれを続けてきました。Vagrantでプッシャーがうまく機能しています。基本的な Horizon 構成で立ち上げます (prod/local は関係ありません)。
これらはすべてLaravel の Stancl Tenancyの背後にあります。そして、それはすべて正常に機能します。私はプロダクションボックスでまったく同じシステムを立ち上げました。それもうまくいきます。
私は今、ロードバランサーとSSLを上に置いて物事を複雑にするビジネスに同じものをインストールしました。したがって、私のボックスは、ラスト マイルで http トラフィックのみを認識します。私\URL::forceScheme('https');
は起動時にすべてをうまく機能させるために使用しています。
この conf ファイルを使用して、Supervisor から Horizon を起動します。
問題:
スーパーバイザ経由で Horizon (または queue:work) を実行すると、次のエラーでプッシャー メッセージを送信できません。
{"例外":"[オブジェクト] (Illuminate\Broadcasting\BroadcastException(コード: 0): at /var/www/crisis/vendor/laravel/framework/src/Illuminate/Broadcasting/Broadcasters/PusherBroadcaster.php:121)
キッカーは次のとおりです。コマンド ラインから Horizon (または queue:work) を起動すると、動作します。 失敗するのは、Supervisor で起動したときだけです。
誰がどこから始めるべきか考えがありますか?
私が試したこと:
- Supervisor でのユーザーの変更 -- それでも失敗する
- Supervisor を変更してキューを開始 -- それでも失敗する
- コマンドラインでルートに変更 -- まだ動作
- ワーカーの変更 -- スーパーバイザーの場合はまだ失敗します
- たくさんありますが、何も違いはありません。
ベンダーファイル全体に変数をダンプすると、私が見つけることができる唯一の違いは次のとおりです。
スーパーバイザーあり (失敗):
コマンドラインで (成功):
Horizon をスーパーバイザーから起動した場合とコマンド ラインから起動した場合の Pusher の違いを絞り込むことはできません。何かご意見は?