2017-06-27 10 views
0

herokuを使用して1つのアプリケーションを開発していますが、1つの問題で苦労しています。 このアプリケーションでは、2つのdynos(1つはサーバー用、もう1つはクライアント用)です。 サーバからデータを取得したいので、クライアントはサーバのIPアドレス(dyno)を知る必要があります。 FixieとQuotaGuard Staticを使用しようとしています。 彼らは私にIPアドレスを教えていますが、これらのIPアドレスを使ってサーバに接続することはできません。IPアドレスを使用してHerokuのクライアントからサーバーを接続する方法

修正方法を教えてください。

+0

ここに意味のあるコードと問題の説明を追加するには[編集]してください。 あなたの問題を で示している[最小、完全、検証可能な例](http:// $ SITEURL $/help/mcve)を投稿すると、より良い回答が得られます。ありがとう! – Peter

答えて

0

2つのダイノスをソケット接続で直接通信したいとします。残念ながら、あなたはそれを簡単に行うことはできません。 Herokuのエモスと12ファクタのアプリケーション設計(http://12factor.net)に反して実行されます。これは、プロセスを互いに分離し、通信を「ネットワーク接続サービス」経由で行うことを指定します。その2番目のポイントはニュアンスのように見えるかもしれませんが、注入された環境変数を使ってダイノスが他のサービスをどのように発見するかに影響します。

この制約には多くの理由がありますが、計算単位としての「dynos」は、アプリケーションのライフサイクルにわたって何度もスケールされたり、異なる物理サーバーに移行されたりする可能性があります。 dyno上のソケットに確実に接続しようとすると、実際にはかなり複雑になります(倍数が動作している場合は正しいものを選択し、スケーリング/移行イベント後に接続を再ネゴシエートするなど)。忘れないでください - たとえあなたがheroku ps:scale client=2に電話するつもりがないとしても、Herokuはそのことを知らず、プラットフォームとして、あなたのことを想定するように設計されています。

解決策は、Redisのような中間サービスを使用して、Python RQなどのフレームワークを介したプロセス間通信を容易にすることです。

また、2つのdynosを別々のアプリケーションとして扱います。次に、そのアプリケーション用に公開されているDNSエントリを使用してHTTP経由で接続することができます。注 - その場合、データベースが必要であれば共有することは可能です。

希望に役立ちます。

関連する問題