【问题标题】:How solve"no python application found check your startup logs" error for Django + uWSGI + nginx stack如何解决 Django + uWSGI + nginx stack 的“no python application found check your startup logs”错误
【发布时间】:2017-06-30 08:22:27
【问题描述】:

我在 ubuntu 16.04 上使用 Django 1.10 和 uWSGI 和 nginx,并使用 ansible 部署我的应用程序。我的项目没有默认结构,但很常见(感谢 Two scoopce :)。 我使用拆分开发和生产设置和配置文件夹而不是“名称”项目文件夹。它看起来像这样:

|-- config
|   |-- __init__.py
|   |-- settings
|   |   |-- __init__.py
|   |   |-- base.py
|   |   `-- dev.py
|   |-- urls.py
|   |-- wsgi_dev.py
|   `-- wsgi_production.py
|-- manage.py
`-- requirements.txt

我的production.py 使用安全加密从 ansible 生成并位于配置/设置中。

有了这个配置,我得到“没有找到 python 应用程序检查你的启动日志”。 Uwsgi 没有看到我的应用程序。

( {{ }} ansible 的 jinja2 语法)

/etc/uwsgi/sites/{{ project_name }}

[uwsgi]
chdir = {{ django_root }}
home = /home/{{ project_user }}/venvs/{{ project_name }}
module = config.wsgi_production:application

master = true
processes = 5

socket = /run/uwsgi/{{ project_name }}.sock
chown-socket = {{ project_user }}:www-data
chmod-socket = 660
vacuum = true

【问题讨论】:

    标签: django nginx ansible web-deployment uwsgi


    【解决方案1】:

    几周后,我可以在我的wsgi.py 中找到问题。它的常见解决方案使用os.environ['ENV'] 代替DJANGO_SETTINGS_MODULE,但对于不同的用户和权限,它不起作用。

    如果您在 wsgi.py 文件中使用如下内容:

    os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings." + os.environ["ENV"]

    no python application found 有问题 - 拆分您的 wsgi 文件。我可以捕捉到 os.environ["ENV"] 返回空字符串。我为我的所有用户添加它,使用源等。但是在帝王模式下的 uwsgi 看不到它。 你应该使用wsgi_dev.pywsgi_production.py,在那里你可以写一些像os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production" 这样的想法。它不是那么优雅,但很好地解决了这个问题。

    对于使用拆分 wsgi,您可以在 wsgi.py 中编写类似这样的内容

    import os
    
    from django.core.wsgi import get_wsgi_application
    
    if os.environ.get('DEV') is True:
       os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.dev")
    else:
       os.environ.setdefault("DJANGO_SETTINGS_MODULE", 
       "config.settings.production")
    
    application = get_wsgi_application()
    

    【讨论】:

    • 您好,您是如何拆分 wsgi 文件的?
    • 对于searx,我发现我必须在启用虚拟环境的情况下运行./manage.sh# Searx virtual environment alias virtualenv="python3 /usr/lib/python3/dist-packages/virtualenv.py" export SEARX_PYENV="${HOME}/searx-ve" source "${SEARX_PYENV}/bin/activate"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2017-02-05
    • 2020-03-13
    • 2017-07-21
    • 2018-09-20
    相关资源
    最近更新 更多