提问者:小点点

**类型错误:“模块”对象不可调用** - uwsgi - 烧瓶 - 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()

部分视图.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)

我认为,如Flask(name)所示,可调用的、尝试过的设置callable=views或callabe=app.views有问题,但没有成功。

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"

技巧?

编辑:实际上,更改可调用的=视图呈现了另一个错误:

type error:“module”对象不可调用

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

编辑2:我正在虚拟环境下运行。

编辑3:只是为了澄清,该应用程序在使用python运行时确实有效run.py.

编辑4:运行uwsgi命令时的详细信息。

Edit5:nginx信息。


共2个答案

匿名用户

移动views.py厘米到应用程序根目录和工作。

匿名用户

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

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背后的真正根本原因。