【问题标题】:Cannot syncdb “DatabaseError: no such table: django_site”无法同步数据库“DatabaseError:没有这样的表:django_site”
【发布时间】:2013-09-21 04:17:51
【问题描述】:

我已经问过这个问题一次但没有得到答案,我已经阅读了我在 Internet 上可以找到的每个发生此错误的示例,因此我将在这里再次尝试提供更多信息。

我正在尝试什么: 克隆远程存储库,然后我将在我的开发机器上实时运行以用于开发目的。

我遇到的问题: 从网络服务器上克隆我的 repo 后,使用 pip requirements.txt 将依赖项安装到我的 virtualenv 中,我尝试使用 syncdb 构建数据库并允许我使用 runserver 运行服务器,但是当我尝试这样做时,我收到错误“DatabaseError:没有这样的表:django_site”输出。

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

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 - 复数.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: no such table: django_site

我真的需要弄清楚这一点,因为它会阻止我在家里部署在我的开发服务器上并进行远程工作。如果有人可以提供帮助,我保证会详细说明答案,如果结果证明是一个复杂的解决方案,我什至会在某处建立一个教程页面。

【问题讨论】:

  • 将所有django相关安装的应用移到顶部,然后尝试运行syncdb
  • @karthikr 感谢您的努力,但这也无济于事。仍然收到“DatabaseError: no such table: django_site”
  • 请粘贴并链接python manage.py syncdb --traceback --verbosity 2的输出
  • 你能试试这些东西吗:1) 将django.contrib.* 应用程序放在已安装应用程序列表的开头。然后 syncdb 或 2)首先通过将它们注释掉来禁用所有本地应用程序(所以只保留 django.contrib.* 那些,然后是 syncdb,然后添加其他应用程序,syncdb。
  • @private 壮观!它起作用了,至少我遇到了一个新的更具体的错误。非常感谢那些帮助过的人。一旦我解决了这些新错误,我将花时间在某处撰写一篇文章,详细说明问题和您的明显解决方案。再次感谢大家!

标签: python django git virtualenvwrapper


【解决方案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

【讨论】:

  • 效果很好,我的家用开发机器感谢您的帮助!
【解决方案2】:

尝试从您已安装的应用中移除 south。然后syncdb,重新添加南并迁移--all

在弄清楚这个问题之前,我在这个问题上转了很久

【讨论】:

  • 感谢您的输入,但在注释掉南并尝试同步数据库时,我得到与以前相同的错误
  • 我想这与我遇到的问题不同。不过值得一试。
【解决方案3】:

在检查回溯 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)

如您所见,您在vellum.models 模块中调用Site.objects.get_current().name,在syncdb 期间其表可能尚未准备好。所以:

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

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

希望对您有所帮助。

【讨论】:

  • 是的,你成功了。 Vellum 实际上是以前的 jedi-master-dev 创建的自制博客。非常感谢您详细说明如何在这种情况下进行回溯,我有点惭愧,我没有想到简单地问 django 问题是什么。我将为像我这样的其他密集的人写一个教程。再次感谢 tuxcanfly。
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 2012-04-22
  • 1970-01-01
  • 2019-08-13
  • 2014-01-28
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
相关资源
最近更新 更多