共有IISサーバーを実行しているPython初心者にDjango / Pythonのインストールを説明する方法[終了]


9

私の制御が及ばない理由により、私たちのウェブサイトはサーバーにIISを使用するホスティングプロバイダーでホストされています。彼らは現在、PHPとASP、さらにはcgiスクリプトを通じてPythonとPerlを提供しています。

私はウェブサイトの再設計と書き直しを行い、PHPからPython / Djangoセットアップに変更したいと考えています。ホスティングプロバイダーは提案を受け付けていますが、「Pythonが何であるか、またはどのように機能するかは実際にはわかりませんが、私たちに説明できる場合は、必要なものを設定するように努めます」 。

ただし、apache / mod_pythonの共有ホスティング環境でDjangoを設定する方法は知っているかもしれませんが、IISでDjangoを設定する方法はわかりません。共有ホスティング環境でどのように設定するかは確かではありません。私は少しググってみましたが、私が見つけるリソースのほとんどは、sysadminが1)Python / Djangoを知っており、2)彼のサイトに専用のIISホスティングを使用していると想定しています。

誰かがホスティングプロバイダーにプロセスを説明する方法を説明したり、ホスティングプロバイダーに転送できる優れた詳細なリソースへのポインターを教えたりできますか?ホスティングを実行している人々はIISの「すべて」を知っているかもしれないが、Pythonの扱い方がわからないことに注意してください。

回答:


8

IISの使用に困っている場合は、できればCGIではなくPyISAPIeを使用してください。PyISAPIeの手順とリンクは以下のとおりです。ウェブホストは、IISを管理する場合、PythonについてよりもISAPI拡張について多くのことを知っています。また、PyISAPIeを使用してPythonについて多くを知る必要はありません。

これを実現するはるかに優れた方法は、ISAPI拡張であるPyISAPIeを使用しています。PyISAPIeは、IIS7のCGIよりもはるかに高速です。これは、Apacheのmod_pythonに似ています。PyISAPIeプロジェクトのホームページには、PyISAPIe上でWSGIを使用してDjangoを設定する手順が記載されています。これにより、パブリック/ハイトラフィックのWebサイトのパフォーマンスが妥当な速度になります。

CGI環境を介してIIS + PythonでDjangoを設定することは、本番環境で使用する場合、非常に遅くなります。1分あたりのリクエストが少数を超えると予想されるWebサイトでは、これを使用しないでください。また、Djangoアプリのプロセスは新しいリクエストごとに再起動されるため、Djangoのキャッシュフレームワークでメモリにキャッシュできるものを厳しく制限します。

Apache、lighttpdなどのまともなWebサーバーでmod_pythonを使用すると、Djangoプロセスを実行するPythonインタープリターがメモリに残り、時間の経過とともに多くのリクエストを処理する新しいApacheワーカースレッドごとに初期化されます。つまり、新しいリクエストごとにPython + Djangoが終了して再起動することはありません。FastCGIセットアップでは、Webサーバー(Apacheやlighttpdなど)がソケット(UNIXドメインまたはTCP)を作成し、FastCGIプロトコルを介してFastCGIアプリケーション(Django Webアプリケーション)と通信します。HTTPプロキシ設定のディット(FastCGIの代わりにHTTPを話します)。CGI環境では、リクエストごとに完全に新しくDjangoアプリケーションを実行するPythonインタープリターが呼び出されるため、アプリケーションはリクエスト全体の状態をメモリに保持できず、データベース以外の場所に適切にキャッシュできません。

:十分なわめき散らすが、あなたはIIS + CGI +ジャンゴを使用する必要がある場合は、ここではこの恐ろしい恐ろしいことを達成する方法を説明します使用して、次のコードを(それがCGIとWSGI間の変換)あなたのDjangoアプリケーションを実行し、独自のCGIスクリプトを作成します。Djangoアプリとコードを指すようにスクリプトを少し編集する必要があります。これは、リクエストを渡す必要があるCGIスクリプトです。次に、すべてのリクエストをCGIスクリプトに転送/書き換えする必要があります...

IIS6では、IISRewriteのようなmod_rewriteに相当するものが必要です。これは無料ではなく、クローズドソースだと思います。IIS7の下で、MicrosoftはついにURL書き換えモジュールを組み込みました。そのドキュメントはここにあります。IIS7で書き換えルールを作成する手順については、こちらをご覧ください。CGIスクリプトで処理されるように、ターゲットのベースURLですべてを転送する必要があります。


ホスティングは共有されているため、主な問題は、ホスティングプロバイダーがPyISAPIeを私のニーズに合わせてどのように構成するか、また、他の顧客のさまざまなニーズにも対応することです。ホームページでWSGIを使用してDjangoを設定する手順が見つかりませんでした...他のすべてが失敗した場合は、CGIアプローチを使用します。1 週間あたりのリクエスト数が400未満の場合、ホスティングを切り替えることを決定するまで、CGIソリューションを利用できると思います。
Epcylon

1

IISのFastCGIでPythonを設定する方法

FastCGI IIS 7以降でPythonを設定する方法は、DJangoを適切にセットアップするための道を開く

...そしてデバッガーをプロセスにフックして、Pythonコードをステップ実行できるようにする

この例ではIIS管理コンソールを使用していませんが、結果の構成ファイルの内容を一覧表示しています

ステップ1

Python +優れたデバッガーをインストールします(この例では、優れたツールを見つけたWingIDEを使用しています)この例では、フォルダーc:\ python27を想定しています

ステップ2

localhost c:\ inetpub \ wwwroot \ mypythonfolderなどにWebフォルダーを作成し、その中に次のweb.configファイルを配置します。

|に注意してください scriptProcessorディレクティブのパイプ文字。IISはこれを使用して、スクリプトをfastCgiアプリケーションにマップします(ステップ3)。フルパス+パイプ文字+以下のステップ3の引数設定と文字ごとに一致する必要があります。

ステップ3

c:\ windows \ system32 \ inetsrc \ configフォルダーのapplicationHost.configファイルで、セクションに以下を配置します。

    <fastCgi>
        <application fullPath="c:\python27\python.exe" arguments="c:\python27\lib\mylib\myfcgi.py" monitorChangesTo="C:\Python27\Lib\r4a\r4afcgi.py" stderrMode="ReturnStdErrIn500" maxInstances="4" idleTimeout="300" activityTimeout="300" requestTimeout="90" instanceMaxRequests="200" protocol="NamedPipe" queueLength="1000" flushNamedPipe="true" rapidFailsPerMinute="10" />
    </fastCgi>

ステップ4

c:\ python27 \ lib \ mylib \ myfcgi.pyに次のコードを追加します。

import wingdbstub

import os、io、sys ret = "environment:\ r \ n" for param in os.environ.keys():ret = ret + "%s =%s \ r \ n"%(param、os.environ [ param])ret = ret + "\ r \ nArgs:" sys.argvの引数:ret = ret + argハンドル= io.open( "c:\ temp \ myfcgi.log"、 'wb')handle.write (ret)handle.close()

手順5

IUSRにc:\ tempフォルダーへの書き込み権限があることを確認してください

手順6

wingdbstub.pyとwingdebugpwをc:\ python27 \ lib \ mylib \フォルダーに配置します。これにより、wingideでのデバッグが可能になります。これらのファイルは、翼のインストール時に提供されます。注:Pythonもコードをwingstub.pycにコンパイルする必要がある場合、PythonプロセスはIISによってそのアカウントで起動されるため、IUSRはそのフォルダーに対する書き込み権限が必要です。

手順6

wingdbを開き、 'import os、io、sys'行にブレークポイントを設定します

手順7

ブラウザでヒットhttp:// localhost / mypythonfolder

すべてが正常に機能する場合は、wingideがトリガーされ、ブレークポイントで実行中のコードが表示されます。そうでない場合:-ファイアウォールの問題があります。PythonプロセスがTCP接続を介してWingIDEインターフェースと通信している-またはwingide内のセキュリティに問題があります。適切なバージョンのwingdebugpwファイルが必要です。これには、基本的に、wingideインストールに対するアクセスを検証するパスワードまたはトークンが含まれています。これが当てはまらない場合、PCにTCPでアクセスできる人なら誰でもコードをデバッグできます。

手順8

c:\ tempにログファイルが作成されていることを確認します。これは、ステップ7を実行できない場合にも機能するはずです。

手順9

このページはデバッガーをトリガーしますが、Webブラウザーにページを返さないことに注意してください。背景:ウェブサーバーは、いわゆる「レコード」を介してfastcgiと通信します。つまり、1つのユーザーリクエストが1つずつ、複数の個別の「レコード」にパックされてアプリケーションに送られます。各レコードは、リクエストの開始、クエリ文字列、ポスト変数などを示すデータ構造です。単一のリクエストへのこれらのレコードのアンパックは、やや面倒であり、http://www.fastcgiの fastcgi仕様に従っています .com / devkit / doc / fcgi-spec.html#S1

c:\ python27 \ lib \ mylib \ myfcgi.pyの内容として、helicontechが提供するzoofcgi.pyのコピーをドロップしました。このpythonファイルは、これらのレコードをデコードしてページを提供することができ、デバッグが非常に興味深いものです。また、helicontechはオプションで、IISとzoofcgi.pyの間にあるdllを提供しますが、このdllは必ずしも必要ではありません。msftが提供するfastcgi実装の少し改良された汎用バージョンを実装していると思います。ただし、それらのdllを使用する場合、コードをステップ実行したい場合、プロセスはかなり迅速に終了し、IIS / DLLは、応答が1秒または2以内に戻らないと判断した場合にpythonプロセスを強制終了します。

それでおしまい。原則として、IISとPythonコード間の通信は名前付きパイプを使用して行われます。あなたはtcpソケットを使用してそれを設定することができるはずですが、私はどのポートが使用されているかを理解できませんでした(私はstdinをselect()編集できるポートに変換する必要があると思いますが、私はそれを与えませんでしたあらゆる試み)


0

私はこれをPythonで試していませんが、PerlでCGIとしてうまく機能しました。 ActiveStateの製品はIISとシームレスに統合されています。ActivePerlで大成功しました。彼らはまた、(おそらく)そこでトリックを行うかもしれないActivePythonを持っています。次に、Djangoをダウンロードしてインストールします。

編集: それでは、IISとの見かけ上の統合をスクラッチしてみましょう...ただし、IISに統合する方法に関する記事を次に示します。また、Iron PythonをWindowsボックスのディストリビューションとして検討することもできます。

プロバイダーにとっては、ASP / ASP.NETのようなWeb開発プラットフォームであるだけでなく、Pythonがそれを使用して開発するための言語であることを彼らが知る必要があるとは思えません。

上記のインストールについては、それを試してみて、どのように進むかを見ていきます。うまくいったらノートを載せます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.