Не удается синхронизировать базу данных «Ошибка базы данных: нет такой таблицы: django_site»

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

Что я пытаюсь сделать: клонирование удаленного репозитория, который я затем буду запускать вживую на своем компьютере для разработки в целях разработки.

Проблема, с которой я столкнулся: после клонирования моего репозитория с веб-сервера, используя pip requirements.txt для установки зависимостей в мой виртуальный сервер, я пытаюсь syncdb создать базу данных и разрешить мне запустить сервер с помощью runserver, но когда я пытаюсь сделать это, я получаю сообщение об ошибке «DatabaseError: нет такой таблицы: django_site».

Что я пробовал: комментировать django-contrib-sites из файла install_apps. При ручной установке django_sites с использованием pip с параметром --ignore-installed и без него, pip говорит, что «Успешно установлено django-sites django», но все равно получает ошибку. Я пытался "мигрировать" и "мигрировать --все", но получаю ту же ошибку. Я также проверил, что db db.sqlite3 — это db, указанный в settings.py, и он находится в правильном месте.

установленные_приложения

INSTALLED_APPS = (
    'south',
    'django.contrib.flatpages',
    'django.contrib.comments',
    'django.contrib.markup',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.sitemaps',

)

Некоторые из них являются доморощенными приложениями от предыдущего разработчика.

Строки в .bashrc

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/projects
source /etc/bash_completion.d/virtualenvwrapper

Последняя строка связана с тем, что я использую Ubuntu на этой машине разработчика, не уверен в этом на 100%, но при запуске bash я не получаю никаких ошибок.

Папка развертывания Не знаю, что это такое, в ней есть мои требования.txt и некоторые другие файлы: - httpd.conf - nowww.htaccess - множественное число.htaccess - требования.txt - ssl.htaccess - wsgi.py

Процесс, который я использую

create virtualenv with mkvirtualenv envname

pip install django

git ssh clone from remote to local folder

pip install -r requirements.txt from repo

./manage.py syncdb

DatabaseError: нет такой таблицы: django_site

Мне действительно нужно это выяснить, так как это мешает мне развернуться на моем сервере разработки дома и выполнять удаленную работу. Если кто-то может помочь, пожалуйста, сделайте это, я обещаю подробно ответить и даже создать где-нибудь обучающую страницу, если это окажется сложным решением.


person leotemp    schedule 16.09.2013    source источник
comment
переместите все установленные приложения, связанные с django, наверх, а затем попробуйте запустить syncdb   -  person karthikr    schedule 17.09.2013
comment
@karthikr Спасибо за усилия, но это тоже не помогло. Все еще получаю «DatabaseError: нет такой таблицы: django_site»   -  person leotemp    schedule 17.09.2013
comment
пожалуйста, вставьте и свяжите вывод python manage.py syncdb --traceback --verbosity 2   -  person tuxcanfly    schedule 17.09.2013
comment
@tuxcanfly traceback расположен @ pastebin.com/6Ehxt55h Спасибо, что нашли время ответить на мою тему, это действительно важно для меня :)   -  person leotemp    schedule 19.09.2013
comment
Можете ли вы попробовать следующие вещи: 1) поместите django.contrib.* приложения в начало списка установленных приложений. Затем syncdb ИЛИ 2) сначала отключите все локальные приложения, закомментировав их (так что оставьте только django.contrib.*, затем syncdb, затем добавьте другие приложения, syncdb.   -  person Private    schedule 19.09.2013
comment
А также, какой проект вы пытаетесь установить?   -  person Private    schedule 19.09.2013
comment
@private Зрелище! Это сработало, по крайней мере, я столкнулся с новой более конкретной ошибкой. Большое спасибо тем, кто помог. Как только я разберусь с этими новыми ошибками, я найду время, чтобы написать статью где-нибудь с подробным описанием проблемы и вашим очевидным решением. Еще раз всем спасибо!   -  person leotemp    schedule 19.09.2013


Ответы (3)


Меня тоже затронула эта проблема.

@tuxcanfly то, что вы говорите, верно, но по какой-то причине выражение Site.objects.get_current().name оценивается, даже если BLOG_NAME установлено в settings.py.

Я отправил тикет (и патч) на GitHub по этой проблеме: https://github.com/pigmonkey/django-vellum/issues/3

Использование try/catch вместо gettattr исправляет это: https://github.com/AndreMiras/django-vellum/commit/9c242e16dc62c218e075554c5f5c5bc590df8265

person Andre Miras    schedule 21.09.2013
comment
Работает отлично, моя домашняя машина разработчика благодарна за вашу помощь! - person leotemp; 23.09.2013

Попробуйте удалить юг из установленных приложений. Затем syncdb, добавьте юг обратно и мигрируйте --all

Я ходил по кругу с этой проблемой целую вечность, прежде чем понять это

person collend    schedule 16.09.2013
comment
Спасибо за вклад, но после комментирования юга и попытки syncdb я получаю ту же ошибку, что и раньше. - person leotemp; 17.09.2013
comment
Я думаю, это другая проблема, чем та, которая была у меня. Хотя стоит попробовать. - person collend; 21.09.2013

Изучив трассировку http://pastebin.com/6Ehxt55h, вы заметите:

  File "/home/username/.virtualenvs/odd/local/lib/python2.7/site-packages/vellum/models.py", line 15, in <module>
    from vellum import settings
  File "/home/username/.virtualenvs/odd/local/lib/python2.7/site-packages/vellum/settings.py", line 10, in <module>
    BLOG_NAME = getattr(settings, 'BLOG_NAME', Site.objects.get_current().name)
  File "/home/username/.virtualenvs/odd/local/lib/python2.7/site-packages/django/contrib/sites/models.py", line 26, in get_current
    current_site = self.get(pk=sid)
  File "/home/username/.virtualenvs/odd/local/lib/python2.7/site-packages/django/db/models/manager.py", line 143, in get
    return self.get_query_set().get(*args, **kwargs)

Как видите, вы вызываете Site.objects.get_current().name в модуле vellum.models, таблица которого может быть еще не готова во время syncdb. Так:

  • добавьте параметр BLOG_NAME в свои настройки - это предотвратит вызов таблицы django_site, поскольку getattr будет успешным

or

  • отложите вызов from vellum import settings туда, где он вам действительно нужен — внутри класса или метода

Надеюсь, это поможет.

person tuxcanfly    schedule 19.09.2013
comment
Ага, ты попал. На самом деле Vellum — это самодельный блог, созданный предыдущим jedi-master-dev. Большое спасибо за подробное описание того, как получить трассировку в этом сценарии, мне немного стыдно, я не додумался просто спросить django, в чем проблема. Я собираюсь написать учебник для других тупых людей, таких как я. Еще раз спасибо tuxcanfly. - person leotemp; 19.09.2013