Python 在uwsgi上运行django时,我无法加载应用程序0错误

Python 在uwsgi上运行django时,我无法加载应用程序0错误,python,django,celery,uwsgi,Python,Django,Celery,Uwsgi,我跑 uwsgi--http:8091--模块proj2.wsgi 但我得到以下错误 *** Operational MODE: single process *** Traceback (most recent call last): File "./proj2/__init__.py", line 5, in <module> from .celery import app as celery_app File "./proj2/celery.py", line

我跑

uwsgi--http:8091--模块proj2.wsgi

但我得到以下错误

*** Operational MODE: single process ***
Traceback (most recent call last):
  File "./proj2/__init__.py", line 5, in <module>
    from .celery import app as celery_app 
  File "./proj2/celery.py", line 5, in <module>
    from celery import Celery
ImportError: No module named celery
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 13930, cores: 1)
奇怪的是,如果我用runserver运行项目,它就会工作

(proj2) [proj2@localhost proj2]$ python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
July 23, 2018 - 17:46:01
Django version 1.9.1, using settings 'pro.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

但是没有和uwsgi一起工作…

最后我解决了这个问题。 我服务于uwsgi和nginx的两个项目。 使用Emperon for uwsgi管理流程。因此,可能应该进行适当的配置,以管理维奥斯皇帝

解决方案:

uwsgi的/etc/uwsgi/sites中的proj2.ini文件如下所示

[uwsgi]
py-autoreload = 2
project = proj2
username = proj2
base = /home/%(username)

chdir = %(base)/work/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = %k

uid = %(username)
socket = /run/uwsgi/%(project).sock
chown-socket = %(username):nginx
chmod-socket = 660
vacuum = true
env = DJANGO_SETTINGS_MODULE=pro.settings
logto = /var/log/uwsgi/%(project).log
项目目录下的wsgi.py应如下所示:

import os
import sys

from django.core.wsgi import get_wsgi_application

sys.path.append("/home/proj2/Env/proj2/lib/python2.7/site-packages/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj2.settings")

application = get_wsgi_application()
皇帝:创建uwsgi.service

Create a Systemd Unit File for uWSGI

    sudo nano /etc/systemd/system/uwsgi.service

    > uwsgi.service

        [Unit]
        Description=uWSGI Emperor service

        [Service]
        ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown <USER>:nginx /run/uwsgi'
        ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
        Restart=always
        KillSignal=SIGQUIT
        Type=notify
        NotifyAccess=all

        [Install]
        WantedBy=multi-user.target
为uWSGI创建系统单位文件
sudo nano/etc/systemd/system/uwsgi.service
>uwsgi服务
[单位]
Description=uWSGI皇帝服务
[服务]
ExecStartPre=/usr/bin/bash-c'mkdir-p/run/uwsgi;周:nginx/run/uwsgi'
ExecStart=/usr/bin/uwsgi——皇帝/etc/uwsgi/sites
重新启动=始终
KillSignal=SIGQUIT
类型=通知
NotifyAccess=all
[安装]
WantedBy=multi-user.target

因此,当您使用“sudo systemctl start uwsgi”启动uwsgi时,所有django站点都将使用/etc/uwsgi/sites/中的ini文件。然后Nginx将使用/run/uwsgi/%(project.sock文件)中的sock文件为它们服务。

将proj2/celery.py重命名为其他文件。它与实际的芹菜应用程序产生冲突。我更改了名称。现在的错误是:回溯(最后一次调用):文件“/proj2/_init__.py”,第5行,from.芹菜导入应用程序作为芹菜应用程序导入错误:没有名为芹菜的模块您必须将“from.芹菜导入应用程序作为芹菜应用程序”更改为“from.import应用程序作为芹菜应用程序”我也更改了它。但仍然存在错误:回溯(最近一次调用last):文件“/proj2/_init__.py”,第7行,在from.orj_芹菜导入应用程序中作为芹菜应用程序文件“/proj2/orj_芹菜.py”,第5行,在from芹菜导入芹菜导入中错误:没有名为芹菜的模块
Create a Systemd Unit File for uWSGI

    sudo nano /etc/systemd/system/uwsgi.service

    > uwsgi.service

        [Unit]
        Description=uWSGI Emperor service

        [Service]
        ExecStartPre=/usr/bin/bash -c 'mkdir -p /run/uwsgi; chown <USER>:nginx /run/uwsgi'
        ExecStart=/usr/bin/uwsgi --emperor /etc/uwsgi/sites
        Restart=always
        KillSignal=SIGQUIT
        Type=notify
        NotifyAccess=all

        [Install]
        WantedBy=multi-user.target