Python と Flask で実行されている Web サイトがあります。私が知る限り、ランダムに 10 回のうち 4 回は 500 エラーを返します。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello world!"
これが私の .wsgi ファイルです (私は virtualenv を使用しており、アプリケーションをインポートする前にアクティブ化しています):
activate_this = '/path/to/app/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from myapp import app as application
これは私の Apache ホスト構成です。
<VirtualHost *:80>
ServerName website.com
WSGIDaemonProcess myapp user=ubuntu group=ubuntu processes=2 threads=5
WSGIScriptAlias / /path/to/app/myapp.wsgi
<Directory /path/to/app>
WSGIProcessGroup myapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
これをデバッグするためのポインタは大歓迎です!
編集:
Apache エラー ログ:
mod_wsgi (pid=29581): Target WSGI script '/path/to/app/myapp.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=29581): Exception occurred processing WSGI script '/path/to/app/myapp.wsgi'.
Traceback (most recent call last):
File "/path/to/app/myapp.wsgi", line 4, in <module>
from myapp import app as application
ImportError: No module named myapp
2 つのプロセスの 1 つ (29581) が virtualenv ビットを実行していないため、インポートするファイルが見つからないようです。
編集2:
PATH で見つからないローカル ファイル myapp.py です。これを .wsgi ファイルの先頭に含める必要がありました。
import sys
sys.path.insert(0, '/path/to/myapp')
activate_this = '/path/to/myapp/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from myapp import app as application