鍍金池/ 問(wèn)答/Python  Linux/ Python2.7 flask uwsgi nginx配置找不到unable t

Python2.7 flask uwsgi nginx配置找不到unable to load app 0

我有一個(gè)騰訊云的服務(wù)器,使用flask,uwsgi,nginx來(lái)搭建一個(gè)服務(wù)器。
按照網(wǎng)上的方法是這樣寫(xiě)的。
我的nginx配置是
我修改的是這個(gè)文件 /etc/nginx/sites-enabled/default

server {
    listen 80;
    server_name 111.230.140.182;
    charset utf-8;
    client_max_body_size 75M;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;
        uwsgi_param UWSGI_PYTHON /usr/bin/python;
        uwsgi_param UWSGI_CHDIR /home/ubuntu/project/test;
        uwsgi_param UWSGI_SCRIPT test:app ;
    }
}

然后我的uwsgi.ini配置是這么寫(xiě)的:

[uwsgi]
socket = 127.0.0.1:8080
plugins = python
chidir = /home/ubuntu/project/test
wsgi-file = /home/ubuntu/project/test/test.py
callable = app                      # 程序變量名
protocol=http
module=test
processes = 4
threads = 2

然后我的test.py是這么寫(xiě)的:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
    return '<h1> hello world! </h1>'
if __name__ =='__main__':
    app.run(debug=True)

我先是運(yùn)行nginx,然后在運(yùn)行uwsgi,但是會(huì)報(bào)這個(gè)錯(cuò)誤:

mapped 332288 bytes (324 KB) for 8 cores
Operational MODE: preforking+threaded
unable to load app 0 (mountpoint='') (callable not found or import error)
unable to find "application" callable in file /home/ubuntu/project/test/test.py
unable to load app 0 (mountpoint='') (callable not found or import error)

我也查了不少文章都沒(méi)有解決我這個(gè)問(wèn)題。特來(lái)求教!
謝謝大家??!

回答
編輯回答
葬愛(ài)

我是這樣修改的,首先把nginx的配置文件修改了一下。
至于為什么這么改,還不清楚,就是看了別人的帖子,然后嘗試做了修改,起碼驗(yàn)證是可以用的

server {
    listen 80;
    server_name 111.230.140.182;
    charset utf-8;
    client_max_body_size 75M;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8080;
        #uwsgi_param UWSGI_PYTHON /usr/bin/python;  //注釋掉
        #uwsgi_param UWSGI_CHDIR /home/ubuntu/project/test;  //注釋掉
        #uwsgi_param UWSGI_SCRIPT test:app ;  //注釋掉
    }
}

然后將uwsgi的配置文件也改為:

[uwsgi]
socket=127.0.0.1:8080
plugins = python
wsgi-file=test.py
master=true
processes=4
threads=2
callable=app
stats=127.0.0.1:9191

從上面看修改,將chdir去掉了,然后加入了master=true,保留socket的同時(shí),加入了一個(gè)stats。
這樣的先后運(yùn)行nginx和uwsgi之后,在瀏覽器輸入ip地址就可以直接跳轉(zhuǎn)到hello world界面了。



說(shuō)一下蛋疼菊緊的事情,上面這個(gè)配置文件是我自己手敲的new.ini。我在之前的uwsgi.ini文件上同樣的內(nèi)容,但是報(bào)錯(cuò),找不到app。我比來(lái)比去發(fā)現(xiàn),這個(gè)uwsgi文件是我從網(wǎng)上直接copy的在“callable=app”前面一行有非常多的空格,看是看不出的,有可能有特殊字符或者什么的。把空格刪了就OK了。
這是個(gè)坑,以后還是自己手動(dòng)敲吧。

2017年6月24日 04:15
編輯回答
背叛者
[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

以上是 官方文檔 里的內(nèi)容。
對(duì)比一下你的 uwsgi.ini 配置文件,有兩處不一樣。
第一處明顯的錯(cuò)誤

chidir = /home/ubuntu/project/test # 應(yīng)該是 chdir,不是 chidir
wsgi-file = /home/ubuntu/project/test/test.py # 應(yīng)該是相對(duì)路徑

應(yīng)該改為

chdir = /home/ubuntu/project/test # 應(yīng)該是 chdir,不是 chidir
wsgi-file = test.py # 應(yīng)該是相對(duì)路徑

第二處是

socket = 127.0.0.1:8080

改為

stats = 127.0.0.1:8080
2018年8月1日 09:59