Django:如何使用Wagtail CMS

时间:2016-01-07 15:39:01

标签: python django database postgresql wagtail

在Django项目中,我有一个应用程序,otherapp,它在包含抓取数据的远程服务器上命中Postgres数据库。我有第二个应用程序内容,它在相同的远程服务器上访问不同的 Postgres数据库,并包含我希望通过Wagtail CMS提供的页面

我使用these指令在本地安装了Wagtail(我没有使用Wagtail安装程序)。我让它在当地工作。然后,我做了本地数据库的pg_dump并做了psql db2<远程数据库服务器上的db2dumpfile.sql。

每个应用程序在本地工作都很好,但我不能让它们一起工作。我以为我可以用database router来指定我想用来检索不同类型数据的数据库。

但是,当我将数据库路由器放入设置文件时,它开始失败。我怎样才能解决这个问题?我是否需要在项目的其他地方声明wagtailcore?

settings.py:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'db1',
        'USER': DB_USERNAME,
        'PASSWORD': DB_PASSWORD,
        'HOST': HOST,
        'PORT': PORT 
    },
    'CMS': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'db2',
        'USER': DB_USERNAME,
        'PASSWORD': DB_PASSWORD,
        'HOST': HOST,
        'PORT': PORT 
    }

}
DATABASE_ROUTERS = [ 'projectname.routers.FindRouter',]

routers.py:

import os
from django.conf import settings
import socket
class FindRouter(object):
    def db_for_read(self, model, **hints) :
        if model._meta.app_label == 'content' :
            return 'CMS'
        return None
    def db_for_read(self, model, **hints):
        if model._meta.app_label == 'content' :
            return 'CMS'
        return None
    def db_for_write(self, model, **hints):
        if model._meta.app_label == 'content' :
            return 'CMS'
        return None
    def allow_relation(self, obj1, obj2, **hints):
        if obj1._meta.app_label == 'content' or obj2._meta.app_label == 'content':
            return True
        return None
    def allow_migrate(self, db, app_label, model=None, **hints):
        if app_label == 'content' :
            return db == 'CMS'
        return None

这是我在运行runserver时遇到的错误:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/cms/

Django Version: 1.9
Python Version: 2.7.10
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'wagtail.wagtailforms',
 'wagtail.wagtailredirects',
 'wagtail.wagtailembeds',
 'wagtail.wagtailsites',
 'wagtail.wagtailusers',
 'wagtail.wagtailsnippets',
 'wagtail.wagtaildocs',
 'wagtail.wagtailimages',
 'wagtail.wagtailsearch',
 'wagtail.wagtailadmin',
 'wagtail.wagtailcore',
 'modelcluster',
 'compressor',
 'taggit',
 'otherapp',
 'content']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'wagtail.wagtailcore.middleware.SiteMiddleware',
 'wagtail.wagtailredirects.middleware.RedirectMiddleware']



Traceback:

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  123.                 response = middleware_method(request)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/wagtail/wagtailcore/middleware.py" in process_request
  11.             request.site = Site.find_for_request(request)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/wagtail/wagtailcore/models.py" in find_for_request
  122.                 return Site.objects.get(hostname=hostname)  # Site.DoesNotExist here goes to the final except clause

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  122.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/query.py" in get
  381.         num = len(clone)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/query.py" in __len__
  240.         self._fetch_all()

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
  1074.             self._result_cache = list(self.iterator())

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/query.py" in __iter__
  52.         results = compiler.execute_sql()

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  852.             cursor.execute(sql, params)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  79.             return super(CursorDebugWrapper, self).execute(sql, params)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/utils.py" in __exit__
  95.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

File "/Users/username/.virtualenvs/bail/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

Exception Type: ProgrammingError at /cms/
Exception Value: relation "wagtailcore_site" does not exist
LINE 1: ...ge_id", "wagtailcore_site"."is_default_site" FROM "wagtailco...
                                                             ^

1 个答案:

答案 0 :(得分:1)

我放弃了将Wagtail表放回第一个数据库,现在应用程序的两个部分正在合作。