2

私はApache、Django、およびwsgiを実行しています。また、 SASという別のソフトウェアを使用して統計分析を行っています。コンテキストを提供するだけです。私の最終的な目標は、クライアントが django で記述されたフォームで送信すると、適切な sas スクリプトが(python wsgi スクリプトを介して) 呼び出され、サーバーで計算を実行し、クライアントを出力ページにリダイレクトすることです。

という基本的なスクリプトがありtest5.pyます。次のようになります。

import os
import subprocess

def application(environ, start_response):

  status = '200 OK'
  output = 'Running External Program!'

  f = open("C:\Documents and Settings\eric\Desktop\out.txt", 'a')
  f.write('hi')
  f.close()

  #os.system(r'start "C:\Program Files\SAS92\SASFoundation\9.2\sas.exe"')
  #subprocess.call([r'C:\Program Files\SAS92\SASFoundation\9.2\sas.exe'])
  #os.startfile(r'C:\Program Files\SAS92\SASFoundation\9.2\sas.exe')
  response_headers = [('Content-type', 'text/plain'),
                      ('Content-Length', str(len(output)))]

  #start_response('301 Redirect', [('Location', 'http://myserver/reports'),])
  start_response(status, response_headers)

  return [output]

したがって、out.txtファイルが作成さhiれ、ファイルに書き込まれます。それはかなりクールです。sas.exe最初の 3 つのコメント行は、サーバー上に存在するこの同じスクリプトも呼び出すように 3 回試みたものです。私は.exe今、何かを動かそうとしているだけなので、ペイントやワードパッドを呼んでも問題ありません。wsgiただし、これらの行はコンテキストで実行されないようです。Python コマンド ラインをロード.exesするだけで、問題なく実行できます。また、最後のコメントはリダイレクトで適切に機能しているようです。実行可能ファイルを追加するために apache を構成する必要があるかどうかはわかりません。用語の使い方が間違っていたらご容赦ください。私はまだこれらすべてにまったく慣れていません。

ありがとう


こんにちはパウロ、

私はあなたの最後のコメントを調べようとしていました。正確に何を探しているのか、またはどのように探すのかについて、少し混乱しています。ここに私が集めたいくつかの情報があります。ところで、私は Windows XP で実行し、Apache 2.2 を使用しています。

私のApacheは、regeditで変数ServerRootがHKEY_LOCAL_MACHINE(http://httpd.apache.org/docs/2.2/platform/windows.html)の下にあるため、すべてのユーザーにインストールされます。また、SAS はすべてのユーザーの下にインストールされていると思います。同僚にログインを使用してサインインしてもらい、これをテストしましたが、まだアクセスできました。それが十分なテストであるかどうかはわかりません。

wsgi を実行したときに得られるログは次のとおりです。プロセスが空であることが重要かどうかはわかりません。

[Mon Aug 20 10:33:17 2012] [info] [client 10.60.8.71] mod_wsgi (pid=5980, process='', application='..com|/test5'): WSGI スクリプトのリロード 'C:/サイト/cprm/pyscripts/test5.wsgi'.

また、以前に投稿したコメントに投稿したリンクから .bat トリックを試しましたが、役に立ちませんでした。「hi」をエコーするだけの簡単なバッチ ファイルを作成し、wsgi スクリプトが存在するディレクトリと同じディレクトリに配置しました。そこにアクセスの問題はないと思いますが、間違っているかもしれません。また、テストのためにサブプロセスを使用して単純な python スクリプトを呼び出してみました。また、何も起こりませんでした。

また、お見せするために、私の httpd.conf ファイルは次のようになります。

AllowOverride なし オプション なし 順序を許可、拒否 すべてから許可

WSGIScriptAlias /test1 "C:/sites/cprm/pyscripts/test1.wsgi" WSGIScriptAlias /test2 "C:/sites/cprm/pyscripts/test2.py" WSGIScriptAlias /test3 C:/sites/cprm/pyscripts/test3.py WSGIScriptAlias /test4 "C:/sites/cprm/pyscripts/test4.py" WSGIScriptAlias /test5 "C:/sites/cprm/pyscripts/test5.wsgi" WSGIScriptAlias / "C:/sites/cprm/wsgi.py"

この情報は役に立ちますか? また、特定の環境変数などを探していますか?

再度、感謝します

4

1 に答える 1

1

バックグラウンド計算やその他のタスクを実行する Web アプリケーションの場合、Django ビューから外部プロセスを呼び出してタスクが完了するまですべてをハングアップさせるのではなく、処理のためにタスクをキューに入れることをお勧めします。これにより、次のことが改善されます。

  • ユーザー エクスペリエンス (リクエストは即座に返されます - ajax を使用してタスクのステータスを通知し、タスクが完了したらダウンロード リンクを提示します)
  • セキュリティ (バックグラウンド プロセスはより安全な資格情報で実行できます)
  • スケーラビリティ (タスクはサーバー間で分散可能)
  • 回復力 (デフォルトでは、アプリケーションが 30 秒以内に応答しない場合、多くの Web サーバーが「エラー 500」を送信します)

キュー内のすべてのエントリを処理するバックグラウンド デーモンの場合、スケールする大きさに応じていくつかのアプローチがあります。

[編集]

WSGI スクリプトから開始するプロセスは、Web サーバーを実行している同じユーザーの下で実行されます。Linux では一般に「www-data」または「nobody」であり、Windows/IIS では「IUSR_MachineName」(IIS 認証を使用している場合は認証済みユーザー) です。WSGI を実行しているのと同じ資格情報を使用してプログラムを起動できるかどうかを確認します。

于 2012-08-17T00:27:07.693 に答える