問題タブ [fastcgi]
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.
python - django,fastcgi:長時間実行されるプロセスを管理するには?
長い計算 (最大 30 分以上) を実行するために変更する必要がある django+fastcgi アプリケーションを継承しました。私がやりたいことは、計算をバックグラウンドで実行し、「ジョブが開始されました」タイプの応答を返すことです。プロセスの実行中に、ジョブの結果が返される時点でジョブが終了するまで、URL へのさらなるヒットは「your job is still running」を返す必要があります。URL の後続のヒットは、キャッシュされた結果を返す必要があります。
私は django のまったくの初心者であり、10 年間重要な Web 作業を行っていないため、自分がやりたいことを行うための組み込みの方法があるかどうかわかりません。subprocess.Popen() を介してプロセスを開始しようとしましたが、プロセス テーブルに無効なエントリが残るという事実を除いて、正常に動作します。プロセスが終了したら、一時ファイルとプロセスの痕跡を削除できるクリーンなソリューションが必要です。
私は fork() とスレッドも試しましたが、実行可能な解決策をまだ見つけていません。私にはかなり一般的なユースケースと思われるものに対する標準的な解決策はありますか? FWIW これは、トラフィックが非常に少ない内部サーバーでのみ使用されます。
python - FastCGI または mod_python を使用して Django を実行する
あなたはどれをお勧めしますか?どちらが速く、信頼できますか? Apache mod_python または nginx/lighttpd FastCGI?
php - fastcgi での永続的なデータベース接続
アプリケーションを php から fastcgi (c) に移植しています。私のホストはApacheを実行しています。
fastcgi アプリはループで実行されるため、mysql 接続を開き、すべての着信要求に対して開いたままにすることができました。これはお勧めですか?
接続はリクエストよりもはるかに高価であり、永続的である必要があるという同数の意見を読んだことがあると思いますが、一方で、開いている接続はリソースを浪費し、毎回閉じる必要があると主張する人もいます。
私の文脈では、これらのうちどれが正しいですか?
python - Windows および Apache での FastCGI としての Python
windows/apache/FastCGI を備えた既存のシステムで、単純な要求/応答 Python モジュールを実行する必要があります。
私が試した Python 用のすべての FastCGI ラッパーは、Linux でのみ機能します (socket.fromfd() などの shticks を使用します)。
ウィンドウの下で実行されるラッパーはありますか?
django - 1 つのサーバー上で Django 用に別々のデータベースを使用して複数のアカウントを設定するにはどうすればよいですか?
複数のユーザー (それぞれが「アカウント」を持つ) がそれぞれ独自のデータベースを持つことができるように Django をインストールするためのオプションは何ですか?
セマンティクスはかなり直感的です。アカウントには複数のユーザーが存在する場合があります。アカウントには一意のデータベースがあります (データベースはアカウントに対応します)。画像WordpressMU。:)
私はこれを検討しました:
外部ソリューション - 複数のサーバー/デーモンへの多重化
複数の Django インストール。各 Django インストール / プロジェクトは、独自の DATABASE_NAME を設定するアカウントに対応しています。
ファイルシステム:
次に、bob と sue のそれぞれに対して Django インスタンスを実行します。私はこの方法論が好きではありません。野蛮に感じられ、悪臭がします。しかし、私はそれがうまくいくと確信しており、提案に基づいて、それを行うための最もクリーンでスマートな方法かもしれません.
アプリは別の場所に保存できます。django 構成に固有である必要があるのは settings.py だけです (さらに、DATABASE_NAME などだけが異なる必要があり、残りはインポートできます)。
(ちなみに、lighttpd と FastCGI を使用しています。)
内部ソリューション - Django 多重化データベース設定
一方、私は Django を 1 つだけインストールすることを考えていましたが、
(a) ログインしたユーザーのアカウントに対応する各データベース テーブルに「prefix_」を追加します。また
(b) ログインしているユーザーのアカウントに応じてデータベースを変更する。
これらを行うための「Djangoの方法」を見ることに特に興味があります(それが非常に単純なものであることを願っています)。たとえば、リクエストのユーザーを受け取り、django.conf.SETTINGS['DATABASE_NAME'] をこのユーザーのアカウントのデータベースに変更するミドルウェア。
これは危険信号です。これはスレッドセーフですか?つまり、django.conf.SETTINGS を変更すると、他のプロセスに影響しますか? django.conf.SETTINGS を変更することには固有の危険がありますか?DB接続はすでにセットアップされていますか? パブリック API の DB 接続部分の再起動ですか? -- この問題をもう一度見るときは、Django のソースを見てみましょう。
2(a) と (b) では、コアとは異なるメカニズムでユーザー認証を保存およびアクセスする必要がある可能性があることを認識しています。
ここでは、Web サーバー レイヤーでの外部マッピングを使用します。現時点では、これが最も単純でクリーンです。ただし、すべてのアカウントに対して FastCGI デーモンを実行するという考えは好きではありません。特に 2000 以上のアカウントがある場合は、不必要にメモリを浪費するようです。ただし、これは興味深い問題であり、特定のケースでは解決策が理想的ではないように思われるため、この議論を開いたままにしておきたいと思います。
コメントをお待ちしております。乾杯
django - Django の複数のインストール - Web サーバー (Lighttpd) を介して透過的なマルチプレックスを構成する方法は?
この質問は、答えから次へと流れます: 1 つのサーバー上で Django 用に別々のデータベースを持つ複数のアカウントをどのように設定しますか?
このようなものは Google や他の場所で見たことがありません (おそらく私の語彙が間違っているのでしょう) ので、入力はインターネットの言説への価値ある追加になると思います。
次のようにサーバーを構成する方法は次のとおりです。
- Lighttpd の 1 つのインストール
- FastCGI として実行される複数の Django プロジェクト
- Django プロジェクトは自由に追加/削除でき、Web サーバーを再起動する必要はありません。
- 現在のユーザーに応じて、特定の Django インストールへのすべての要求/応答の透過的なリダイレクト
つまり、Django プロジェクトが与えられた場合 (対応する FastCGI ソケットを使用):
- ボブ (/tmp/bob.fcgi)
- スー (/tmp/sue.fcgi)
- ジョー (/tmp/joe.fcgi)
Django プロジェクトは、次のような (単純化しすぎた) スクリプトで開始されます。
ログインしているユーザーに応じて、http://www.example.com/へのトラフィックを正しい Django アプリケーションに送信する必要があります。
つまり、http://www.example.comは、bob がログインしている場合は /tmp/bob.fcgi、joe がログインしている場合は /tmp/joe.fcgi、sue の場合は /tmp/sue.fcgi となります。誰もログインしていない場合は、ログイン ページにリダイレクトする必要があります。
次のアルゴリズムを使用して、逆多重化「プレクサー」FastCGI スクリプトを検討しました。
Cookie $PLEX が設定されている場合、要求を /tmp/$PLEX.fcgi にパイプします。
それ以外の場合は、ログイン ページにリダイレクトします (ユーザー名 => PLEX の多対 1 マッピングに基づいて Cookie PLEX を設定します)。
もちろん、セキュリティの問題として、$PLEX は汚染チェックされるべきであり、$PLEX は信頼の推定を生じさせるべきではありません。
Lighttpd の構成は次のようになります (ただし、Apache、Nginx なども同様に簡単に使用できます)。
意見や感想、役に立つリンク、FastCGI plexer を適切に実装する方法を知っていることなど、すべて歓迎します。
ありがとうございました。
perl - 単純な fastCGI Perl スクリプトが失敗するのはなぜですか?
私は Perl の世界に属していないので、これのいくつかは私にとって初めてのことです。apache2 および mod_fcgid パッケージがインストールされた Ubuntu Hardy LTS を実行しています。mod-cgi ではなく fcgid で MT4 を実行したいと考えています (従来の CGI で問題なく動作するようです)。
単純な Perl スクリプトを fcgid の下で実行することすらできないようです。シンプルな「Hello World」アプリを作成し、この前の質問のコードを含めて、 FCGI が実行されているかどうかをテストしました。
スクリプトに HelloWorld.fcgi という名前を付けました (現在、fcgid は .fcgi ファイルのみを処理するように設定されています)。コード:
コマンド ラインから実行すると、"plain old Boring..." が出力されます。Apache への http 要求を介して呼び出すと、500 内部サーバー エラーが発生し、スクリプトの出力が Apache エラー ログに出力されます。
同じコードの .cgi バージョンを実行すると、正常に動作します。スクリプトの出力がエラー ログに記録される理由を教えてください。Apache 構成は、デフォルトの mod_fcgid 構成に加えて、VirtualHost ディレクティブにあります。
python - IISでのPythonFastCGI-stdout書き込みの問題
Python FastCGIコードに非常に特有の問題があります。sys.stdoutのファイル記述子は「-1」であるため、書き込むことができません。プログラムの最初の行でこれをチェックしているので、コードが変更されていないことがわかります。
試しましたがsys.stdout = os.fdopen(1, 'w')
、そこに書かれているものはブラウザに届きません。
同じアプリケーションがApacheで問題なく動作します。
ここに記載されているIIS用のMicrosoft提供のFastCGI拡張機能を使用しています:http://learn.iis.net/page.aspx/248/configuring-fastcgi-extension-for-iis60/
私はfcgiext.iniでこれらの設定を使用しています:
誰かが何が悪いのか、どこを見ればいいのか教えてもらえますか?
すべての提案は大歓迎です...
fastcgi - Windows IIS サーバー上の Fast CGI での終了の処理
Windows の FastCGI ヘルプを見つけるのは非常に困難です。どんな助けでも大歓迎です。
FastCGi の概念は、プロセスが要求に耐え、呼び出し間で状態を維持できるようにすることです。これは、呼び出しの間にデータベースを開くなどのオーバーヘッドがないことを意味します。
それとは別に、FastCGI は完全に多重化されています: http://cryp.to/publications/fastcgi/#MULTIPLEXING
問題は C API にあります
libfcgi.dll のソースは、http://www.fastcgi.com/drupal/node/5 から入手できます 。
FCGIまたはIISに接続している人が急いで指摘しているように、これはMSによってサポートされていません
django - nginxの背後でfcgiを実行しているdjangoを正常に再起動するには?
fcgi を使用して接続された nginx の背後で django インスタンスを実行しています (manage.py runfcgi コマンドを使用)。コードはメモリに読み込まれるため、django fcgi プロセスを強制終了して再起動しないと新しいコードをリロードできず、ライブ Web サイトが中断されます。再起動自体は非常に高速です。しかし、最初に fcgi プロセスを強制終了すると、一部のユーザーのアクションが中断されてしまい、良くありません。中断を引き起こさずに新しいコードをリロードするにはどうすればよいか疑問に思っています。アドバイスをいただければ幸いです。