簡體   English   中英

Flask 應用程序在使用 Alpine、nginx 和 uwsgi 時出現 ModuleNotFoundError .. 但使用 Flask 運行它可以正常工作

[英]Flask app has ModuleNotFoundError when using Alpine, nginx, and uwsgi.. but with flask run it works fine

我編寫了一個小燒瓶應用程序,它使用flask run在我的 Windows 10 桌面上運行良好,並且使用flask run在 Alpine Linux 3.14 Docker 容器上flask run ,但是當我使用 nginx 和 uwsgi 時,我收到一個ModuleNotFoundError: No module named '_cffi_backend'錯誤。 我已經瀏覽了所有其他符合此描述的關於 stackoverflow 的文章,但無濟於事。

python --version我正在運行Python 3.9.7 ,它是使用來自 Docker Hub 的官方python:3.9-alpine3.14容器安裝的。 我還添加了以下apk add --no-cache python3-dev gcc libc-dev libffi-dev uwsgi-python3 jpeg-dev zlib-dev git nano

這是 uwsgi 日志中的完整錯誤

uWSGI running as root, you can use --uid/--gid/--chroot options
*** WARNING: you are running uWSGI as root !!! (use the --uid flag) ***
spawned uWSGI master process (pid: 109)
spawned uWSGI worker 1 (pid: 110, cores: 2)
spawned uWSGI worker 2 (pid: 111, cores: 2)
bcrypt is required to use Flask-Bcrypt
Traceback (most recent call last):
  File "/app/./run.py", line 4, in <module>
    from ticketsapi import create_app
  File "/app/./ticketsapi/__init__.py", line 8, in <module>
    from flask_bcrypt import Bcrypt
  File "/usr/local/lib/python3.9/site-packages/flask_bcrypt.py", line 27, in <module>
    raise e
  File "/usr/local/lib/python3.9/site-packages/flask_bcrypt.py", line 24, in <module>
    import bcrypt
  File "/usr/local/lib/python3.9/site-packages/bcrypt/__init__.py", line 25, in <module>
    from . import _bcrypt  # type: ignore
ModuleNotFoundError: No module named '_cffi_backend'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. GAME OVER ***
SIGINT/SIGQUIT received...killing workers...
Exception ignored in: <module 'threading' from '/usr/lib/python3.9/threading.py'>
Traceback (most recent call last):
  File "/app/./run.py", line 4, in <module>
Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 1388, in _shutdown
    from ticketsapi import create_app
  File "/app/./ticketsapi/__init__.py", line 7, in <module>
    from playhouse.flask_utils import FlaskDB
  File "/usr/local/lib/python3.9/site-packages/playhouse/flask_utils.py", line 12, in <module>
    from playhouse.db_url import connect as db_url_connect
  File "/usr/local/lib/python3.9/site-packages/playhouse/db_url.py", line 7, in <module>
    from playhouse.cockroachdb import CockroachDatabase
  File "<frozen importlib._bootstrap>", line 1004, in _find_and_load
  File "<frozen importlib._bootstrap>", line 157, in __enter__
  File "<frozen importlib._bootstrap>", line 196, in _get_module_lock
KeyboardInterrupt
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. GAME OVER ***
    def _shutdown():
KeyboardInterrupt:

pip freeze 的輸出

backports.entry-points-selectable==1.1.0
bcrypt==3.2.0
blinker==1.4
certifi==2021.10.8
cffi==1.15.0
click==8.0.3
cryptography==35.0.0
distlib==0.3.3
dnspython==2.1.0
email-validator==1.1.3
filelock==3.3.1
Flask==2.0.2
Flask-Bcrypt==0.7.1
Flask-Login==0.5.0
Flask-Mail==0.9.1
Flask-WTF==0.15.1
idna==3.3
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
peewee==3.14.4
Pillow==8.4.0
platformdirs==2.4.0
pycparser==2.20
PyMySQL==1.0.2
python-dotenv==0.19.1
six==1.16.0
supervisor==4.2.2
virtualenv==20.9.0
Werkzeug==2.0.2
WTForms==2.3.3

我的 nginx 配置文件

server {
    listen 5000;

    location /static {
        alias /app/ticketsapi/static;
    }

    location / {
        uwsgi_pass unix:///app/socket/uwsgi.sock;
        include /etc/nginx/uwsgi_params;
        # proxy_redirect off;
    }
}

我的 uwsgi ini

## Application
##
module = run:app
chdir=/app
socket = /app/socket/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 777
processes = 5
threads = 2


## General
##
strict = true
master = true
enable-threads = true
vacuum = true
single-interpreter = true
die-on-term = true
need-app = true
lazy-apps = true

我一直在努力解決這個問題幾天了,我很難過。 如何解決此錯誤並繼續我的項目?

通過查看各種日志,我注意到其中引用了兩個略有不同的 Python 版本,即 3.9.5 和 3.9.7。

雖然我使用的是 Alpine Linux 3.14,但我使用這個Digital Ocean 教程通過使用 Python 虛擬環境 (venv) 來解決我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM