web.py コードを Apache で構成したときに、奇妙な問題に遭遇しました。2 つのクラスで使用する必要がある 3 つの変数があります。以前はグローバル変数を使用してこれを処理していましたが、残念ながら現在は機能しません。
例:
urls = (
'/', 'index',
'/result','Result'
)
# index is basically a form which takes some inputs
class index:
def POST(self):
global VAR1, VAR2, VAR3
i = web.input()
VAR1 = i.word1.__str__()
VAR2 = i.word2.__str__()
VAR3 = i.word3.__str__()
raise web.seeother('/result')
class Result:
def GET(self):
print VAR1, VAR2
return r_result(VAR1, VAR2)
def POST(self):
print VAR2, VAR3
これは、コードを個別に実行すると(つまり、python webappy.py)完全に正常に機能しますが、Apache 設定で使用すると、次のようになります。
NameError: Result.Get の print ステートメントでグローバル名 'VAR1' が定義されていません
ApplicationIssues: http://code.google.com/p/modwsgi/wiki/ApplicationIssuesをチェックしていたところ、次のステートメントが見つかりました。
アプリケーション グローバル変数
WSGI アプリケーションをホストする Python サブ インタープリターはリクエスト間でメモリに保持されるため、グローバル データは事実上永続的であり、あるリクエストから次のリクエストに状態を転送するために使用できます。ただし、UNIX システムでは、Apache は通常複数のプロセスを使用して要求を処理し、そのような各プロセスには独自のグローバル データがあります。つまり、グローバル データは使用できますが、その単一プロセスのコンテキスト内で安全に再利用できるデータをキャッシュするためにのみ使用できます。どのプロセスで実行されるかに関係なく、すべての要求ハンドラーに表示される必要がある情報を保持する手段として、グローバル データを使用することはできません。
これらの変数をクラスと関数に渡さなければなりません。変数をビルトインおよびWebモジュールに追加しようとしましたが、うまくいきませんでした。
PS: また、これらの変数をファイルやデータベースに保存したくありません。
私は自分自身を明確にしたことを願っています。