繁体   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