web-dev-qa-db-ja.com

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

私の制御が及ばない理由により、当社のWebサイトは、サーバーにIISを使用するホスティングプロバイダーでホストされています。現在、PHPとASPを提供しており、cgi-scriptsを介してPythonとPerlも提供しています。

ウェブサイトの再設計と書き直しを行い、PHPからPython/Djangoの設定に変更したいと思います。ホスティングプロバイダーは提案を受け付けていますが、「Pythonが何であるか、またはそれがどのように機能するかは実際にはわかりませんが、説明していただければ、設定を試みます。必要なものは何でも。」.

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

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

9
Epcylon

IISの使用に固執している場合は、可能であればCGIの代わりにPyISAPIeを使用してください。 PyISAPIeの手順とリンクは以下のとおりです。 Webホストは、PythonよりもIISを管理している場合、ISAPI拡張機能について多くのことを知っており、PyISAPIeでPythonについて多くを知る必要はありません。

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

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

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

IIS + CGI + Djangoを使用する必要がある場合は、この恐ろしい恐ろしいことを実現する方法は次のとおりです:使用 次のコード = Djangoアプリを実行する独自のCGIスクリプトを作成します(CGIとWSGIの間で変換されます)。スクリプトを少し編集して、Djangoアプリとコードを指すようにする必要があります。これは、リクエストを渡す必要があるCGIスクリプトです。次に、すべてのリクエストをCGIスクリプトに転送/書き換える必要があります...

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

8
user6281

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

FastCGIでPythonを設定する方法は次のとおりですIIS 7+ withは、まともなDjango setup

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

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

ステップ1

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

ステップ2

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

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

ステップ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:" for arg in sys.argv:ret = ret + arg handle = 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でのデバッグが可能になります。これらのファイルは、wingのインストールで提供されます。注:Pythonもコードをwingstub.pycにコンパイルする必要がある場合、pythonプロセスはそのアカウントで起動されるため、IUSRはそのフォルダーに対する書き込み権限が必要ですIISによる

ステップ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ブラウザーにページを返さないことに注意してください。いくつかの背景:Webサーバーはいわゆる「レコード」を介してfastcgiと通信します。これは、単一のユーザーリクエストが複数の個別の「レコード」にパックされたアプリケーションに送られることを意味します。各レコードは、リクエストの開始、クエリ文字列、POST変数などを示すデータ構造です。これらのレコードを単一のリクエストに解凍するのはちょっと面倒です。 http:/)のfastcgi仕様に従います。 /www.fastcgi.com/devkit/doc/fcgi-spec.html#S1

C:\ python27\lib\mylib\myfcgi.pyのコンテンツとして、helicontechから提供されたzoofcgi.pyのコピーをドロップしました。このpythonファイルは、これらのレコードをデコードしてページを提供することができ、デバッグするのに非常に興味深いです。また、helicontechは、オプションでIISの間にあるdllを提供することにも注意してください。 =およびzoofcgi.pyですが、このdllは厳密には必要ありません。msftが提供するfastcgi実装のわずかに改善された汎用バージョンを実装していると思います。ただし、dllを使用する場合、コードをステップ実行する場合、プロセスは次のようになります。かなり迅速に終了し、IIS/the DLLは、1秒または2秒以内に応答が返ってこないと結論付けたときに、pythonプロセスを強制終了します。

それでおしまい。原則として、IISとあなたのpythonコードは名前付きパイプで行われます。tcpソケットを使用してセットアップできるはずですが、私はそうではありませんでしたどのポートが使用されているかを把握できます(stdinをポートに変換してselect()edできるようにする必要があると思いますが、その試みはしませんでした)

1
Robert van Geel

私はこれをPythonで試したことがありませんが、Perlを使用したCGIとしてはうまく機能しました。 ActiveStateの 製品はIISと一見統合されています。 ActivePerlで大成功を収めました。また、 ActivePython もあり、(おそらく)そこでもトリックを実行する可能性があります。次に、ダウンロードDjango インストール )するだけだと思います。

編集:わかりました、IISとの見かけのない統合をスクラッチします...ただし、IISに統合する方法 に関する記事がありますIron Python をWindowsボックスのディストリビューションと見なすこともできます。

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

私が上で述べたインストールに関しては、それを試してみて、それがどのように機能するかを見ていきます。うまくいったらメモを投稿します!

0
squillman