2 つのスクリプトを実行しています。1 つはポート :80 で、もう 1 つはポート :81 です。一部のユーザーは、ポート :81 のサーバーで問題が発生しているため、次のような回避策を実装しようとしています。
ほとんどのユーザーにとって問題なく機能する古い方法です。
- AngularJS アプリはリクエストを行います
example.com:81/getpdf/1
subprocess.Popen
Flask サーバーは、2 つの個別の呼び出しと.wait()
メソッドを使用して、PhantomJS と ImageMagick を使用して PNG および PDF ファイルを生成します。- Flask の を使用
send_file()
すると、PDF がユーザーに送り返され、ダウンロードが開始されます。
この問題に対する私の回避策:
- AngularJS はリクエストを行います
example.com/getpdf/1
- Flask サーバー (
:80
) は新しい GET リクエストr = requests.get(url_with_port_81)
を作成し、古い AngularJS リクエストを偽って PNG/PDF を作成します - を使用する代わりに
send_file()
、生成された PDF のパスを返すようになりました - 私は返す
send_file(r.text)
さて、私の回避策を使用して、PNG/PDF を作成するために実行するサブプロセスが何らかの形でクラッシュします。私はsudo pkill python
そうする必要があり、そうする場合にのみ、サーバー上のフォルダーにデータのない PNG を取得しています。
基本的に、PhantomJS は実行されましたが、データ (html/css のみで、Flask サーバーから取得する必要がある重要なものはありません) をロードしておらず、クラッシュします。これはどのように可能ですか?ブラウザが を使用して行うリクエストを偽造しているだけですrequests.get
か、それともここで何かを認識していませんか?
私subprocess.Popen
はnon-blockingだと思ったので、PNG/PDF を埋めるためにデータのリクエストに答えることができますか?