Подтвердить что ты не робот

Гуникорн, ни один модуль с именем 'myproject

Я устанавливаю ранее созданный сайт на новом сервере. Я не оригинальный разработчик.

Я использовал Gunicorn + nginx в прошлом, чтобы поддерживать приложение (в основном следуя этот учебник), но у меня проблемы с ним здесь.

I source venv/bin/activate, тогда ./manage.py runserver 0.0.0.0:8000 работает хорошо, и все работает как ожидалось. Я закрыл его и запустил gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application и получил следующее:

[2016-09-13 01:11:47 +0000] [15259] [INFO] Starting gunicorn 19.6.0
[2016-09-13 01:11:47 +0000] [15259] [INFO] Listening at: http://0.0.0.0:8000 (15259)
[2016-09-13 01:11:47 +0000] [15259] [INFO] Using worker: sync
[2016-09-13 01:11:47 +0000] [15262] [INFO] Booting worker with pid: 15262
[2016-09-13 01:11:47 +0000] [15262] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/var/www/myproject/venv/lib/python3.5/site-packages/gunicorn/util.py", line 357, in import_app
    __import__(module)
ImportError: No module named 'myproject.wsgi'
[2016-09-13 01:11:47 +0000] [15262] [INFO] Worker exiting (pid: 15262)
[2016-09-13 01:11:47 +0000] [15259] [INFO] Shutting down: Master
[2016-09-13 01:11:47 +0000] [15259] [INFO] Reason: Worker failed to boot.

Я считаю, что это связано со структурой всего приложения. Раньше я создавал приложения с базовой структурой:

myproject
├── manage.py
├── myproject
│   ├── urls.py
│   ├── views.py
│   ├── component1
│   │   ├── urls.py
│   │   └── views.py
│   ├── component2
│   │   ├── urls.py
│   │   └── views.py
├── venv
│   ├── bin
│   └── ...

Вместо этого он имеет такую ​​структуру, как:

myproject
├── apps
│   ├── blog
│   │   ├── urls.py
│   │   ├── views.py
│   │     └── ...
│   ├── catalogue
│   │   ├── urls.py
│   │   ├── views.py
│   │     └── ...
│   ├── checkout
│   │   ├── urls.py
│   │   ├── views.py
│   │     └── ...
│   ├── core
│   │   ├── urls.py
│   │   ├── views.py
│   │     └── ...
│   ├── customer
│   ├── dashboard
│   └──  __init__.py
├── __init__.py
├── manage.py
├── project_static
│   ├── assets
│   ├── bower_components
│   └── js
├── public
│   ├── emails
│   ├── media
│   └── static
├── settings
│   ├── base.py
│   ├── dev.py
│   ├── __init__.py
│   ├── local.py
│   └── production.py
├── templates
│   ├── base.html
│   ├── basket
│   ├── blog
│   └── ....
├── urls.py
├── venv
│   ├── bin
│   ├── include
│   ├── lib
│   ├── pip-selfcheck.json
│   └── share
└── wsgi.py

Итак, нет никакого "основного" модуля, который запускает шоу, и это то, что я ожидаю, что стрелок ищет.

любые мысли?

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

application = get_wsgi_application()
4b9b3361

Ответ 1

Ваше сообщение об ошибке

ImportError: No module named 'myproject.wsgi'

Вы запустили приложение с помощью

gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

И wsgi.py имеет строку

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

Это отключение. Чтобы распознать проект как myproject.wsgi, родительский каталог должен находиться на пути python... running

cd .. && gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

Удалит эту ошибку. Однако тогда вы получите другую ошибку, так как файл wsgi.py относится к settings вместо myproject.settings. Это означает, что приложение предназначено для запуска из корневого каталога вместо одного каталога вверх. Вы можете понять это, посмотрев код - если он использует абсолютный импорт, обычно они говорят from myproject.app import ... или from app import .... Если это предположение верно, ваш правильный commmand

gunicorn --bind 0.0.0.0:8000 wsgi:application

Если приложение использует myproject во всех путях, вам нужно будет изменить свой PYTHONPATH, чтобы запустить его правильно...

PYTHONPATH=`pwd`/.. gunicorn --bind 0.0.0.0:8000 myproject.wsgi:application

Ответ 2

Запустите эти команды после замены вашего пути к рабочему каталогу python.

# Go to your current working directory
cd /path/to/folder

# Activate your virtual environment. Ignore if already in activated mode
source /path/to/virtualenv/bin/activate

# Install gunicorn in virtualenv
pip3 install gunicorn

# Run this command. Replace PORT and app name accordingly
gunicorn --bind 0.0.0.0:5000 wsgi:app