** TypeError:' module'对象不可调用** - uwsgi - flask - python

时间:2016-03-13 18:14:05

标签: python uwsgi

这是我的文件结构:

|--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)

然后我转到app路线并获取:

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

我认为可调用有问题,尝试设置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命令时的详细信息。

Edit5:nginx info。

2 个答案:

答案 0 :(得分:0)

将views.py从cm移动到app root dir并运行。

答案 1 :(得分:0)

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

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