Skip to main content
 首页 » 编程设计

python之在 Apache之CentOS 上运行 Flask

2025年05月04日18Renyi-Fan

我设置了一个非常简单的 flask 应用程序来测试 CentOS 6 上 Apache 中的部署,但我收到以下错误:

[Sat Apr 26 12:44:20 2014] [error] mod_wsgi (pid=29782): Target WSGI script '/var/www/html/sites/rtdsllc/rtdsllc.wsgi' cannot be loaded as Python module. 
[Sat Apr 26 12:44:20 2014] [error] mod_wsgi (pid=29782): Exception occurred processing WSGI script '/var/www/html/sites/rtdsllc/rtdsllc.wsgi'. 
[Sat Apr 26 12:44:20 2014] [error] Traceback (most recent call last): 
[Sat Apr 26 12:44:20 2014] [error] File "/var/www/html/sites/rtdsllc/rtdsllc.wsgi", line 10, in <module> 
[Sat Apr 26 12:44:20 2014] [error]     from rtdsllc import app as application 
[Sat Apr 26 12:44:20 2014] [error] ImportError: cannot import name app 

这是我的 wsgi 文件:

activate_this = '/var/www/virtualenvs/default/bin/activate_this.py' 
execfile(activate_this, dict(__file__=activate_this)) 
 
path = '/var/www/html/sites/rtdsllc' 
 
import sys 
if path not in sys.path: 
    sys.path.append(path) 
 
from rtdsllc import app as application 

这是我的虚拟主机配置:

WSGISocketPrefix run/wsgi 
 
<VirtualHost *:8086> 
 
    WSGIDaemonProcess rtdsllc user=apache group=apache threads=5 
    WSGIScriptAlias /test /var/www/html/sites/rtdsllc/rtdsllc.wsgi 
 
    ErrorLog logs/rtdsllc-error_log 
    CustomLog logs/rtdsllc-access_log common 
 
    <Directory /var/www/html/sites/rtdsllc/rtdsllc> 
        WSGIProcessGroup rtdsllc 
        WSGIApplicationGroup %{GLOBAL} 
        Order deny,allow 
        Allow from all 
    </Directory> 
</VirtualHost> 

这是我的 flask 应用程序:

from flask import Flask, render_template 
 
app = Flask(__name__)       
 
@app.route('/') 
def home(): 
  return render_template('index.html') 
 
if __name__ == '__main__': 
  app.run(debug=False) 

最后是我的文件夹结构:

rtdsllc/ 
├── rtdsllc 
│   ├── __init__.py 
│   ├── routes.py 
│   ├── static 
│   │   ├── css 
│   │   ├── img 
│   │   └── js 
│   └── templates 
│       ├── base.html 
│       └── index.html 
└── rtdsllc.wsgi 

什么给了?我试过各种设置组合都无济于事。在 apache 中设置 Flask 应用程序的正确方法是什么?

编辑

ls -las rtdsllc/rtdsllc:

4 drwxr-xr-x. 4 apache apache 4096 Apr 26 13:07 . 
4 drwxr-xr-x. 3 apache apache 4096 Apr 25 22:54 .. 
0 -rw-r--r--. 1 apache apache    0 Apr 25 20:57 __init__.py 
4 -rw-r--r--. 1 apache apache  134 Apr 25 22:55 __init__.pyc 
4 -rw-r--r--. 1 apache apache  190 Apr 26 12:48 routes.py 
4 -rw-r--r--. 1 apache apache  521 Apr 26 13:07 routes.pyc 
4 drwxr-xr-x. 5 apache apache 4096 Apr 25 20:14 static 
4 drwxr-xr-x. 2 apache apache 4096 Apr 25 20:19 templates 

请您参考如下方法:

在做:

from rtdsllc import app as application 

它将导入:

rtdsllc/rtdsllc/__init__.py 

根据您的目录列表:

0 -rw-r--r--. 1 apache apache    0 Apr 25 20:57 __init__.py 

该文件是空的,其中没有“app”对象可以通过导入拖入。

下面是哪个文件?

app = Flask(__name__)   

现在它不在您尝试导入它的地方。


更新 1

使用:

from rtdsllc.routes import app as application 

如果您的“app”对象在“rtdsllc.routes”中。