FlaskアプリケーションがIIS 6で実行されている)を取得するのを手伝ってくれませんか?isapi-wsgiを使用しようとしましたが、仮想ディレクトリアドレスにアクセスすると、 「指定されたモジュールが見つかりませんでした」というページ。これには他のオプションがありますか?
以下はPythonスクリプトをisapi-wsgi用に記述したスクリプトです。仮想ディレクトリが作成され、IISマネージャで問題なく動作しましたが、サイトは機能しませんでした。
from wof import app
import os
app.secret_key=os.urandom(24)
import isapi_wsgi
def __ExtensionFactory__():
return isapi_wsgi.ISAPISimpleHandler(app)
if __name__ == '__main__':
from isapi.install import *
params = ISAPIParameters()
sm = [ScriptMapParams(Extension="*", Flags=0)]
vd = VirtualDirParameters(Name="WOFPy_Sondes", Description="ISAPI-WSGI for WOFPY Sondes test", ScriptMaps=sm, ScriptMapUpdate="replace")
params.VirtualDirs = [vd]
HandleCommandLine(params)
HTTP-> IIS-> ISAPI-> FastCGI-> WSGI(Flaskアプリケーション)
このサイト のインストーラ.exeを使用してpyodbc
をインストールしました。ソースからのインストール(仮想環境にインストールするためのpipなど)には、C/C++コンパイラが必要です。
wfastcgi.py
のコピーを取得するPython 3.3(私は David Ebbo's を使用しています)をサポートするバージョンを選択してください。 "公式"バージョン ここから 。
wfastcgi.py
スクリプトをC:\Inetpub\wwwroot
にインストールし、アプリケーションにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)に読み取りアクセス権があることを確認します。
virtualenv
をシステムサイトパッケージにインストールするC:\Python33\Scripts\pip.exe install virtualenv
(Python 3.3を使用していて、すべてをデフォルトの場所にインストールした場合)
システムのほぼどこにでもアプリケーションをインストールできます。 C:\Inetpub
にインストールすることもできます。このチュートリアルでは、アプリケーションインストールのルートフォルダーを%APPROOT%
と呼びます。 (環境変数に引用符を入れないでください。)
アプリケーションにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)に、すべてのスクリプトファイルへの読み取りアクセス権があることを確認してください。このコマンド:
cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"
アプリケーションディレクトリに次の権限を付与します。
必要なローカル構成を追加します(私のアプリケーションは、バージョン管理システムによって無視されるlocal.cnfファイルを使用します)-たとえば、データベースURL。
アプリケーションのWeb.config
ファイルが%APPROOT%
に含まれていることを確認してください。ファイル形式については、以下のセクションをご覧ください。
C:\Python33\Scripts\virtualenv.exe --system-site-packages "%APPROOT%\env"
(アプリケーションがすでにそのディレクトリを使用している場合は、env
以外の名前を選択してください。)
cd "%APPROOT%"
env\Scripts\activate
pip install -r Packages
(私のプロジェクトでは、Packages
という名前のファイルに要件仕様を保存しています。)
inetmgr.msc
(Start->Run…を使用して、編集ボックスにinetmgr
を入力し、 [〜#〜] Enter [〜#〜])を押して、インターネットインフォメーションサービス(IIS)マネージャを起動します。作成するノード(Webサイトまたは仮想ディレクトリ)のローカルパスをFlaskアプリケーションのルートフォルダーに設定してください。wfastcgi.py
はローカルパスを使用して=を識別しますFlaskリクエストを処理するアプリケーション。
ノードに読み取りとスクリプト(スクリプトの実行)の両方の権限を付与します。
fcgiext.ini
このファイルは、手順1でインストールしたfcgiext.dll
と同じディレクトリにあります(デフォルトでは%SYSTEMROOT%\system32\inetsrv
)。
このファイルを構成するには、いくつかのパラメーターが必要です。
fcgiext.ini
内のセクションの名前。この値を選択します-アプリケーションを表すものを選択します。これらのパラメーターを使用して、以下を行います。
FastCGIリクエストを処理セクションにマップします。
*:{site id}={application name}
を[Types]
セクションに追加します。*:/lm/w3svc/{site id}/root/{path to app}={application name}
を[Types]
セクションに追加します。このアプリケーションのパラメーターを含む処理セクション([{application name}]
)を追加します( 完全参照 ):
ExePath={approot}\env\python.exe
Arguments=C:\Inetpub\wwwroot\wfastcgi.py
(またはwfastcgi.py
アダプタスクリプトがインストールされている場所)EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value,etc.
(引用規則については、完全なリファレンスを参照してください)。これは WSGI_LOG環境変数 を設定するのに適した場所です。サイトにサービスを提供するアカウント(デフォルトでは「ネットワークサービス」)がファイルへの書き込み権限を持っていることを確認し、(ファイルが存在しない場合) )含まれているディレクトリにファイルを追加する権限。インターネットインフォメーションサービス(IIS)マネージャーを使用して、提供するノード(Webサイトまたは仮想ディレクトリ)のコンテキスト(右クリック)メニューから[プロパティ...]を選択します。 Flaskアプリケーションおよび
[ホームディレクトリ]タブ(Webサイト)または[仮想ディレクトリ]タブ(仮想ディレクトリ)で、[構成...]ボタンをクリックします。
「ワイルドカードアプリケーションマップ」セクションで、「挿入...」ボタンを使用してワイルドカードマッピングを追加します。
%SYSTEMROOT%\system32\inetsrv\fcgiext.dll
です。このファイルは(この設定では)wfastcgi.py
、notによってIISによって読み取られます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<applicationSettings>
<add key=“PYTHONPATH” value=“”/>
<add key=“WSGI_HANDLER” value=“module.application”/>
</applicationSettings>
</configuration>
<add>
要素は環境変数を追加します(Pythonではos.environ
)。
WSGI_HANDLER
を指定する必要があります-wfastcgi.py
に、WSGIアプリケーションオブジェクトの検索方法を指示します。値が「()」で終わっている場合、wfastcgi.py
は指定されたオブジェクトを呼び出し、WSGIアプリケーションオブジェクトを返すことを期待します。
PYTHONPATH
は特別に処理されます-wfastcgi.py
はPYTHONPATH
の値に対して(Windows標準の%VAR%
表記を使用して)変数拡張を実行し、結果をセミコロンを付け、WSGIアプリケーションを呼び出す前にsys.path
にエントリを追加します。 wfastcgi.py
は、WSGIアプリケーションオブジェクトを含むモジュールをインポートする前に、現在のディレクトリをWebサイトまたは仮想ディレクトリのローカルパスとして指定されたパスに変更します。PYTHONPATHに空の文字列を含めると、検索に= Flaskアプリケーションディレクトリを開始点として使用します。PYTHONPATHをfcgiext.ini
に設定することもできます(この場合、インタープリターによってsys.path
に含まれ、次にwfastcgi.py
)。
WSGI_RESTART_FILE_REGEX
は、Python FastCGIハンドラープロセスの再起動をトリガーするパスのファイル変更通知をフィルターするために使用される正規表現を提供します。これを設定して、ソースファイルまたは構成ファイルが変更されたときにトリガーします。 (?i).*\.(py|cnf|config)$
。
WSGI_LOG
はここで設定できますが、fcgiext.ini
で設定する方がよいと思います。
IIS 7.でFastCGIの一部が劇的に変更されました。このバージョン以降、FastCGIはIISを介して直接サポートし、拡張機能(つまり、ステップ1.4 IIS 7+の場合、fcgiext.ini
はFastCGIの動作を制御せず、作成/編集する必要はありません)代わりに、[〜 #〜] cgi [〜#〜]インターネットインフォメーションサービスコントロールパネル>プログラムと機能> Windows機能のオン/オフで有効です。
Web.config
IIS 7は、FastCGIに関連する構成設定をWeb.config
ファイルから読み取るためのIISの最初のバージョンです。Web.config
ファイルには、<configuration>
要素、<system.webServer>
要素を含む<handlers>
要素、および<add>
要素を含む属性:
*
*
FastCgiModule
Unspecified
Script
scriptProcessor
属性<add>
要素のこの属性には、使用するPythonインタープリター.exe
ファイル(Scripts
サブフォルダー内のファイル)への完全パスを含める必要がありますPython virtualenv)の後に|
が続き、次に使用しているwfastcgi.py
ファイルへのフルパスが続きます。これらのパスはマシンの設定に依存するためアプリが実行されている場合は、この属性を展開プロセスの一部として設定できます。
inetmgr
で、ツリーのサーバーノードをクリックし、中央のペインからFastCGI Settingsを選択します。実行可能ファイルと引数のペアのリストが表示されます。python.exe
およびwfastcgi.py
へのフルパスのエントリを追加します。どちらも、<handlers>/<add>
のWeb.config
要素に表示されるのと同じ方法で指定する必要があります。PYTHONPATH
環境変数を設定して、アプリケーションコードベースのルートを含めるようにしてください。空のPYTHONPATH
エントリを<applicationSettings>
のWeb.config
に追加することに関するアドバイスは、このバージョンのIISには適用されない場合があります。この件に関するDjangoのページをご覧ください。動作中のDjangoプロジェクトをセットアップするのに役立ちましたが、Flaskアプリの場合はそれほど違いはないはずです。
http://code.djangoproject.com/wiki/DjangoOnWindowsWithIISAndSQLServer
IISを使用することはありませんが、IISはCGIゲートウェイをサポートしているため、CGIをWSGIに適合させることができるはずです。
IIS <--> CGI <--> WSGI
WSGIをCGIスクリプトとして実行するには、Python標準ライブラリの CGIHandler を使用できます。