Почему отображается ошибка: The requested URL / was not found on this server. (Django)?

Ребят, всем привет.

Ставлю проект на Django. Не могу решить ситуацию. Захожу на сайт, появляется ошибка: The requested URL / was not found on this server. Если я кидаю в общую папку Templates 404.html - отображается эта страница.

Что я сделал:

1) Создал проект на базе Django 1.9.2 и python 3.4.3 в PyCharm.
2) Заказал себе VPS на Cent OS7 и привязал его к хостингу.
3) Создал пользователя с sudo правами: bakotiinii
4) Установил время сервера.
5) Установил EPEL

sudo yum install epel-release

6) Установил PostgreSQL

sudo yum install python-pip python-devel postgresql-server postgresql-devel postgresql-contrib gcc nginx


7) Настроил PostgreSQL

sudo postgresql-setup initdb

sudo systemctl start postgresql

sudo nano /var/lib/pgsql/data/pg_hba.conf


Настраиваем базу для доступа под юзером

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
#host    all             all             ::1/128                 ident
host    all             all             ::1/128                 md5


Делаем базе автозапуск

sudo systemctl restart postgresql
sudo systemctl enable postgresql


8) Создаем пользователя для базы данных:

sudo su - postgres

psql

CREATE DATABASE myproject;

CREATE USER myprojectuser WITH PASSWORD 'password';

GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;


9) Ставим Python 3.4.3

sudo yum install python34-devel

10) Ставим виртуальное окружением

sudo pip install virtualenv

10) Создаем виртуальное окружение в корне под управлением Python 3.4.3

mkdir ~/apifolder
cd ~/apifolder

mkvirtualenv -p /usr/local/bin/python3.4 djangoen


11) Активируем виртуальное окружение

source djangoen/bin/activate

12) Ставим Django, Gunicorn и управляющий psycopg2

pip install django==1.9.2 gunicorn psycopg2

13) Создаем проект Django в текущей папке (имя проекта то же самое, что и имеет мое в PyCharm):

django-admin.py startproject apifolder .

14) Заменяю папку проекта своим проектом из PyCharm через FTP

15) Вношу изменения в settings.py - подключаю базу, подключаю статику и ставим хосты:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'myproject',
        'USER': 'myprojectuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}


STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
STATICFILES_DIRS = (
)

DEBUG = True

ALLOWED_HOSTS = [
    '*',
    ]


16) В моделях проекта используется ImageField, поэтому ставлю Pillow (Сначала зависимые пакеты, потом само Pillow), после чего Django перестает ругаться.

sudo yum install libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel

pip install Pillow


17) Проверяем базу данных, делаем миграцию и собираем статику

cd ~/apifolder
./manage.py makemigrations
./manage.py migrate
./manage.py collectstatic


Деактивируем виртуальное окружение

18) Ставим конфиг Юникорну

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

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=bakotiinii
Group=nginx
WorkingDirectory=/home/bakotiinii/apifolder
ExecStart=/home/bakotiinii/apifolder/djangoen/bin/gunicorn --workers 3 --bind unix:/home/bakotiinii/apifolder/apifolder.sock apifolder.wsgi:application

[Install]
WantedBy=multi-user.target


Делаем его перезапуск:

sudo systemctl start gunicorn
sudo systemctl enable gunicorn


19) Настраиваю nGinx

sudo nano /etc/nginx/nginx.conf

server {
    listen 80;
    server_name example.ru www.example.ru;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/bakotiinii/apifolder;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://unix:/home/bakotiinii/apifolder/apifolder.sock;
    }
}


20) Финальные настройки и запуск:

sudo usermod -a -G bakotiinii nginx

chmod 710 /home/bakotiinii

sudo nginx -t

sudo systemctl start nginx

sudo systemctl enable nginx


______

В итоге получается ситуация, что:

На локалке через runserver - работает.

На боевом сервере

1) Админка работает.
2) База данных работает.
3) Статика отдается.
4) А страницы отдают ошибку, что по таким URL ничего нет.
5) Логи nginx никаких ошибок не дают.

Мой проект имеет несколько приложений, поэтому каждое приложение имеет свой файлик url и папку template (url прицепил через инклуд, а шаблоны привязал через PyCharm - правая кнопка мыши и MarkDirectory as template). Мб в этом какая-то беда?

download?id=DLRkcI1vADF3xCIrfbeSMoc0rIR4

Например сами ULR:

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^step(?P<step_id>[0-9]+)$', views.step, name='step'),
    url(r'^addcomment(?P<step_id>[0-9]+)$', views.addcomment, name='addcomment'),
    url(r'^question(?P<question_id>[0-9]+)$', views.question, name='question'),
    url(r'^newpage(?P<step_id>[0-9]+)/$', views.new_page,name='newpage'),
    url(r'^lastpage(?P<step_id>[0-9]+)/$', views.last_page,name='lastpage'),
    url(r'^answerset$', views.answerset, name='answerset'),
    url(r'^isperm$', views.isperm, name='isperm'),
]


Update

Добавил

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
            os.path.join(BASE_DIR, 'bakot/templates/'),
            os.path.join(BASE_DIR, 'loginsys/templates/'),            
            ]
        , 
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.media'
            ],
        },
    },
]


P.s. TEMPLATE_DIRS был удален с версии 1.8.

Не помогает, почта еще не настроена.

Update - решение

url.py одного из приложения копировался через FTP почему-то без прав. Поэтому копирование отменялось, и создавался стандартный файл с примерами-комментами. Начал ходить по проекта и заметил несовпадение размеров.

P.s. Нужно юзать git!
  • Вопрос задан
  • 2080 просмотров
Решения вопроса 1
DmitryVoronkov
@DmitryVoronkov
Python Developer
TEMPLATE_DIRS = ('FULL_PATH_PROJECT/templates/',)
Попробуй в настройках перечисли пути к своим шаблонам.
Еще:
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s '
                      '%(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'django.utils.log.NullHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'simple'
        },
        'mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html': True,
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'INFO',
        },
        'django.db': {
            'level': 'DEBUG',
            'handlers': ['console'],
            'propagate': True,
        },
        'django.request': {
            'handlers': ['mail_admins', 'console'],
            'level': 'ERROR',
            'propagate': False,
        },
    }
}

Если почта на сервере настроена, то полетят письма с логами ошибок тебе. Смотри их.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
dimonchik2013
@dimonchik2013
non progredi est regredi
самое время начать постигать азы маркетинга:
хочешь получить ответ - упрости вопрос
Ответ написан
BOOMER_74
@BOOMER_74
Full-Stack разработчик
А ulrs.py хоть правили?
Ответ написан
winordie
@winordie
Лучшая документация -- исходники
Через runserver запусти
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы