Flask 网站 -- 500 Internal Server Error
Flask website -- 500 Internal Server Error
我一辈子都想不通为什么我尝试启动的这个烧瓶应用程序不起作用。我 运行 它在一个 5 美元的 Digital Ocean droplet 上。这是(希望)您需要了解的一切:
目录布局(包含在 /var/www/
中):
FlaskApp
FlaskApp
__init__.py
static
templates
venv
flaskapp.wsgi
__init__.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "yay it worked"
if __name__ == "__main__":
app.run()
flaskapp.wsgi
:
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
from FlaskApp import app as application
application.secret_key = 'Add your secret key'
FlaskApp.conf
(包含在/etc/apache2/sites-availble
):
<VirtualHost *:80>
ServerName the.ip.blah.blah
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
venv
是通过在 /var/www/FlaskApp/FlaskApp/
中调用 virtualenv venv
创建的。使用 source venv/bin/activate
输入 venv
后,我使用 pip install flask
在 venv
中安装了烧瓶。
Wsgi 已启用 (a2enmod wsgi
)。 FlaskApp.conf 已启用 (a2ensite FlaskApp
)。最后,我多次重启 apache,但都没有成功 (service apache2 restart
)。
我正在遵循 this 关于如何设置烧瓶应用程序的指南。
这是我的错误的屏幕截图:
如能提供帮助,我们将不胜感激。
提前致谢。
编辑:我发现了问题:ImportError: No module named flask
。这有点奇怪,因为我确实在 virtualenv 中做了 pip install flask
。当我在 virtualenv 中打开一个 python 控制台会话并尝试 import flask
时,我没有收到任何错误,所以不确定发生了什么。
此外,这个应用程序如何使用 venv
?我看不到它在任何地方都可以访问,那么它是如何使用它的呢?也许这就是我得到 ImportError
的原因,因为我只在 virtualenv 上安装了 flask 但它没有被使用?
问题本质上是您在虚拟环境中安装了 Flask,可能还有其他所需的库,但是 python(wsgi 接口)是 运行 系统 python没有安装这些额外的库。
我最近在 Apache 上的经验很少 运行 Python(我来自 mod_python 和 cgi 的时代),但显然处理这个问题的一种方法是使用site
包将 site-packages
从你的 venv 添加到执行的 Python 中。这将进入您的 .wsgi
文件。
import site
site.addsitedir('/path/to/your/venv/lib/pythonX.X/site-packages')
我认为解决您的问题的最佳方法是添加告诉您的 wsgi 文件关于您的虚拟环境并激活它:
将以下代码放入您的 flaskapp.wsgi
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
并重新启动 Apache。
希望它会有所帮助!
查找更多 here
我一辈子都想不通为什么我尝试启动的这个烧瓶应用程序不起作用。我 运行 它在一个 5 美元的 Digital Ocean droplet 上。这是(希望)您需要了解的一切:
目录布局(包含在 /var/www/
中):
FlaskApp
FlaskApp
__init__.py
static
templates
venv
flaskapp.wsgi
__init__.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "yay it worked"
if __name__ == "__main__":
app.run()
flaskapp.wsgi
:
#!/usr/bin/python
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/FlaskApp/")
from FlaskApp import app as application
application.secret_key = 'Add your secret key'
FlaskApp.conf
(包含在/etc/apache2/sites-availble
):
<VirtualHost *:80>
ServerName the.ip.blah.blah
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
<Directory /var/www/FlaskApp/FlaskApp/>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/FlaskApp/FlaskApp/static
<Directory /var/www/FlaskApp/FlaskApp/static/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
venv
是通过在 /var/www/FlaskApp/FlaskApp/
中调用 virtualenv venv
创建的。使用 source venv/bin/activate
输入 venv
后,我使用 pip install flask
在 venv
中安装了烧瓶。
Wsgi 已启用 (a2enmod wsgi
)。 FlaskApp.conf 已启用 (a2ensite FlaskApp
)。最后,我多次重启 apache,但都没有成功 (service apache2 restart
)。
我正在遵循 this 关于如何设置烧瓶应用程序的指南。
这是我的错误的屏幕截图:
如能提供帮助,我们将不胜感激。
提前致谢。
编辑:我发现了问题:ImportError: No module named flask
。这有点奇怪,因为我确实在 virtualenv 中做了 pip install flask
。当我在 virtualenv 中打开一个 python 控制台会话并尝试 import flask
时,我没有收到任何错误,所以不确定发生了什么。
此外,这个应用程序如何使用 venv
?我看不到它在任何地方都可以访问,那么它是如何使用它的呢?也许这就是我得到 ImportError
的原因,因为我只在 virtualenv 上安装了 flask 但它没有被使用?
问题本质上是您在虚拟环境中安装了 Flask,可能还有其他所需的库,但是 python(wsgi 接口)是 运行 系统 python没有安装这些额外的库。
我最近在 Apache 上的经验很少 运行 Python(我来自 mod_python 和 cgi 的时代),但显然处理这个问题的一种方法是使用site
包将 site-packages
从你的 venv 添加到执行的 Python 中。这将进入您的 .wsgi
文件。
import site
site.addsitedir('/path/to/your/venv/lib/pythonX.X/site-packages')
我认为解决您的问题的最佳方法是添加告诉您的 wsgi 文件关于您的虚拟环境并激活它: 将以下代码放入您的 flaskapp.wsgi
activate_this = '/path/to/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
并重新启动 Apache。 希望它会有所帮助! 查找更多 here