无法syncdb“DatabaseError:没有这样的表:django_site”

时间:2013-09-16 21:40:44

标签: python django git virtualenvwrapper

我已经问了一次这个问题,但没有得到答案,我已经阅读了我可以在互联网上找到的这个错误的每一个例子,所以我将再次尝试更多信息。< / p>

我正在尝试的内容: 克隆一个远程仓库,然后我将在我的开发机器上运行以进行开发。

我遇到的问题: 克隆我的repo离开web服务器后,使用pip requirements.txt将依赖项安装到我的virtualenv中我尝试使用syncdb来构建db并允许我使用runserver运行服务器但是当我尝试这样做时,我得到错误“DatabaseError:没有这样的表:django_site“输出。

我尝试了什么:从我的installed_apps中注释掉django-contrib-sites。使用pip手动安装django_sites有和没有--ignore-installed,pip说“成功安装django-sites django”但仍然得到错误。我试图“迁移”和“迁移--all”但我得到了同样的错误。我还验证了db db.sqlite3是settings.py中指定的数据库,并且位于正确的位置。

installed_apps -

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时我没有遇到任何错误。

部署文件夹 不知道这是什么,它有我的requirements.txt和其他一些文件: - httpd.conf - nowww.htaccess - plural.htaccess - requirements.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

我真的需要解决这个问题,因为它阻止我在家里的开发服务器上进行部署并进行远程工作。如果有人可以提供帮助,我承诺会详细解答答案,如果事实证明这是一个复杂的解决方案,甚至可以在某个地方建立一个教程页面。

3 个答案:

答案 0 :(得分:1)

尝试从已安装的应用中删除南方。然后是syncdb,再向南添加并迁移--all

我已经多年来一直围着这个问题进行了解决这个问题

答案 1 :(得分:1)

在检查追溯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.modelssyncdb期间其表格可能尚未就绪。所以:

  • BLOG_NAME设置添加到您的设置中 - 这将阻止调用django_site表格,因为getattr将成功

  • 将对from vellum import settings的调用延迟到您真正需要的地方 - 在课程或方法中

希望有所帮助。

答案 2 :(得分:1)

我也受到这个问题的影响。

@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