**TypeError: 'module' object is not callable** - uwsgi - flask - python

**TypeError: 'module' object is not callable** - uwsgi - flask - python

这是我的文件结构:

|--cm
|  |--bin
|  |--include
|  |--lib
|  |--app
|  |  |--views.py
|  |  |--all Flask webapp folders
|  |--uwsgi.ini
|  |--run.py

run.py

from app import views

if __name__ == "__main__":
    views.application.run()

views.py的一部分:

application = Flask(__name__)
application.debug = True
WTF_CSRF_ENABLED = True

uwsgi.ini

[uwsgi]
master = true
processes = 1
socket = /var/www/KRAKEN/public/cm/socket.sock
chmod-socket = 666
plugin = python

nginx.conf

server {
        listen 80;
        server_name server.me www.server.me;
        root /var/www/KRAKEN/public/;
        error_log /var/www/KRAKEN/public/nginx.error.log;
        location / {
           index index.php index.html index.htm;
        }

    location /cm {
        include uwsgi_params;
        uwsgi_param SCRIPT_NAME /cm;
        uwsgi_pass unix:///var/www/KRAKEN/public/cm/socket.sock;
    }

}

当我运行

uwsgi --ini uwsgi.ini -w run

我得到:

*** Starting uWSGI 2.0.12 (32bit) on [Mon Mar 14 15:45:13 2016] ***
compiled with version: 5.3.0 on 11 March 2016 01:01:30
os: Linux-3.14.58-1-ARCH #1 SMP Fri Dec 11 18:21:13 MST 2015
nodename: KRAKEN
machine: armv7l
clock source: unix
pcre jit disabled
detected number of CPU cores: 4
current working directory: /var/www/KRAKEN/public/cm
detected binary path: /var/www/KRAKEN/public/cm/bin/uwsgi
your processes number limit is 14019
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
*** RRDtool library available at 0x1eebe58 ***
uwsgi socket 0 bound to UNIX address socket.sock fd 3
Python version: 3.5.1 (default, Mar  6 2016, 10:14:04)  [GCC 5.3.0]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x1efa768
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 128512 bytes (125 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x1efa768 pid: 32487 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 32487)
spawned uWSGI worker 1 (pid: 32489, cores: 1)

然后我转到应用程序路线并获得:

unable to load app 0 (mountpoint='') (callable not found or import error)

我认为 callable 有问题,尝试设置 callable = views 或 callabe = app.views,如 Flask(name) 但没有成功。

NGINX 错误日志抛出:

2016/03/14 17:19:22 [error] 1434#0: *355 upstream prematurely closed connection while reading response header from upstream, client: 190.228.175.122, server: server.me, request: "GET /cm/ HTTP/1.1", upstream: "uwsgi://unix:///var/www/KRAKEN/public/cm/socket.sock:", host: "www.server.me"

提示?

编辑:实际上,更改 callable = views 会导致另一个错误:

TypeError: 'module' 对象不可调用

现在我认为这是一个更 python 相关的问题...

Edit2:我运行在虚拟环境下。

Edit3:澄清一下,当 运行 和 python run.py.

时,该应用程序确实有效

Edit4: 当我 运行 uwsgi 命令时的细节。

编辑 5:nginx 信息。

将 views.py 从 cm 移到应用程序根目录并工作。

此答案的一般解决方案是 运行宁和故障排除

uwsgi --ini uwsgi.ini -w run

是调试您从 run.py 得到的错误。试一试并解决任何问题 -

python run.py

Flask 给你这个 TypeError 因为任何遵循这个模式的文件:

from app import views

if __name__ == "__main__":
    views.application.run()

有问题并且不会运行有或没有 UWSGI。 UWSGI 隐藏了 TypeError 背后的真正根本原因。