web-dev-qa-db-ja.com

uWSGI / Flask: "no python application found、check your startup logs for errors"

NGINX + uWSGI + Flaskで実行しているWebサイトがあります。

ほとんどの場合、Webサイトは問題なく動作しますが、nginxから返されたページに "Internal Server Error"と表示される場合があります。これを行っているときにuWSGIログを見ると、次のようになっています。

[pid: 1580|app: -1|req: -1/37] 69.162.124.228 () {46 vars in 716 bytes} [Sat May 12 10:25:13 2018] GET / => generated 21 bytes in 0 msecs (HTTP/1.1 500) 2 headers in 83 bytes (0 switches on core 0)
--- no python application found, check your startup logs for errors ---

長い間この状態になっている可能性がありますが、flaskアプリに任意の変更を加えるなど、無関係と思われる操作を行うと、すべてが再び機能し始めます。コードが変更されることなく、 "Internal Server Error"が再び発生し始めるときのランダムな時間。

UWSGIアプリケーションを直接実行してみましたが、エラーは発生しません。

flaskアプリにエラーをキャプチャするためにSentryをインストールしようとしましたが、これが発生しても何も表示されません。

  • これをどのように診断しますか?

  • 他にどんなログファイルを見ることができますか?

  • これを引き起こしている可能性が高いのは何ですか?

私はこれに1週間以上来ており、SOのほとんどすべての関連する質問を読みました。アイデアが足りなくなり、何が起こっているのかわからない場合は、このプロジェクトを断念します。どんな助けでも大歓迎です。

これが私のファイルです:

uWSGI設定(mysite.ini)

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = mysite.sock
chmod-socket = 660
vacuum = true

die-on-term = true

logto = /var/log/uwsgi/%n.log

wsgi.py

from tunnelling.python.flask_app import app as application

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

nginx:

server {
    listen 80;
    server_name www.mysite.com;
    server_name mysite.com;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/dimraft/mysite/mysite.sock;
    }

   listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    if ($scheme != "https") {
        return 301 https://$Host$request_uri;
    } # managed by Certbot
}

systemdファイル:

[Unit]
Description=uWSGI instance to serve mysite
After=network.target

[Service]
User=dimraft
Group=www-data
WorkingDirectory=/home/dimraft/mysite
Environment="PATH=/home/dimraft/mysite/mysiteenv/bin"
ExecStart=/home/dimraft/mysite/mysiteenv/bin/uwsgi --ini mysite.ini

[Install]
WantedBy=multi-user.target
5
user1592096

@Johnは基本的にこれについては正しかったが、明確にするために詳しく説明したい。

本質的に同じ設定のプロジェクトで同じ問題を抱えていましたが、uwsgi.pyモジュールを私のflaskアプリケーションパッケージ内に移動することで修正されました

myprojectname/
    __init__.py
    uwsgi.py

次に、uwsgi.iniのモジュール定義を、次のようにmodule = myprojectname.uwsgi:applicationに変更します。

[uwsgi]
 module=myprojectname.uwsgi:application
 master=true
 processes=2

 socket=myprojectname.sock
 chmod-socket=660
 logto=/var/log/uwsgi/uwsgi.log
 die-on-term=true

また、元のポストされたコードサンプルの場合と同様に、呼び出し可能オブジェクトの名前がapplicationであることを確認してください。 uWSGIはデフォルトで、このアプリケーションという名前のオブジェクトを検索するようになっています。私は、アプリケーションなど、他の名前を付けて機能させるのに苦労しました。

0
SciGuyMcQ