2016-11-18 47 views
1

我想用docker-compose来运行本地的Django/Nginx项目。为什么我的Django项目抛出一个ImportError:no模块名为my_project.wsgi?

我收到后,下面的错误泊坞窗,构成了起来:

self.wsgi = self.app.wsgi() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi 
    self.callable = self.load() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load 
    return self.load_wsgiapp() 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp 
    return util.import_app(self.app_uri) 
    File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app 
    __import__(module) 
ImportError: No module named my_project.wsgi 
[2016-11-18 02:58:22 +0000] [9] [INFO] Worker exiting (pid: 9) 
[2016-11-18 02:58:22 +0000] [1] [INFO] Shutting down: Master 
[2016-11-18 02:58:22 +0000] [1] [INFO] Reason: Worker failed to boot. 

我不是100%肯定,但我相信有问题的行是在我的搬运工,构成这里:

command: /usr/local/bin/gunicorn my_project.wsgi:application -w 2 -b :8000 

这里是我的全多克尔 - 撰写:

web: 

    restart: always 

    build: ./web 

    expose: 

    - "8000" 

    links: 

    - postgres:postgres 

    - redis:redis 

    volumes: 

    - /usr/src/app 

    - /usr/src/app/static 

    env_file: .env 

    environment: 

    DEBUG: 'true' 

    command: /usr/local/bin/gunicorn my_project.wsgi:application -w 2 -b :8000 



nginx: 

    restart: always 

    build: ./nginx/ 

    ports: 

    - "80:80" 

    volumes: 

    - /www/static 

    volumes_from: 

    - web 

    links: 

    - web:web 



postgres: 

    restart: always 

    image: kartoza/postgis:9.4-2.1 

    ports: 

    - "5432:5432" 

    volumes: 

    - pgdata:/var/lib/postgresql/data/ 



redis: 

    restart: always 

    image: redis:latest 

    ports: 

    - "6379:6379" 

    volumes: 

    - redisdata:/data 

我的目录结构:

docker-compose.yml 
web/ 
    Dockerfile 
    manage.py 
    my_project/ 
     __init__.py 
     settings.py 
     urls.py 
     wsgi.py 
    accounts_app/ 

我wsgi.py:

import os  
from django.core.wsgi import get_wsgi_application 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "my_project.settings") 
application = get_wsgi_application() 

我的settings.py:

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__)) 
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) 
SECRET_KEY = os.environ['SECRET_KEY'] 

ALLOWED_HOSTS=['*'] 
TEMPLATE_DEBUG = True 

WSGI_APPLICATION = 'my_project.wsgi.application' 

DATABASES = { 
    'default': { 
     'ENGINE': 'django.contrib.gis.db.backends.postgis', 
     'NAME': os.environ['POSTGRES_NAME'], 
     'USER': os.environ['POSTGRES_USER'], 
     'PASSWORD': os.environ['POSTGRES_PASS'], 
     'HOST': os.environ['DB_SERVICE'], 
     'PORT': os.environ['DB_PORT'], 
    } 
} 

TIME_ZONE = "UTC" 
LANGUAGE_CODE = "en-us" 
SITE_ID = int(os.environ.get("SITE_ID", 1)) 

我不知道从哪里开始解决此,如果任何人有任何建议,请让我知道我可以发布实际的Django项目的dockerfile,如果这将有所帮助。

+0

可以在settings.py中错误地设置我的BASE_DIR导致此问题? – david

回答

0

当你尝试使用import的东西时,它会搜索模块的“Python路径”。 (An article I've written about virtualenv解释了有关Python路径的更多信息。)Python包含Python路径中的当前目录。所以,当你的当前目录是包含“manage.py”的目录时,import my_project.wsgi可以工作,因为从该目录中,Python可以找到文件my_project/wsgi.py。 Gunicorn从一个不同的目录开始,所以Python找不到它。您需要在执行gunicorn之前更改目录,或者将PYTHONPATH=[your project root directory]添加到环境中。

相关问题