Развертывание мультитенантного приложения (django -тенант) - Ошибка запуска ./manage migrate_schemas - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть одно django приложение, размещенное на AWS - Web client <=> nginx <=> uwsgi <=> django. Я решил превратить его в мультитенанта с django -тентом . Также я использую django -celery-beat для планирования задач. Мое отдельное приложение работает нормально на AWS, и мой мультитенант также работает локально, на моей машине. У меня была проблема с распознаванием схем с сельдереем, но я решил ее здесь: Можно ли использовать django -celery-beat с django -тенантом? . Тем не менее, ошибка, которую я получаю сейчас, находится в моей VPN : django.db.utils.ProgrammingError: relation" app_modelcustomuser "does not exist

Она появляется, когда я пытаюсь запустить ./manage migrate_schemas (я делаю makemigration на локальном компьютере и фиксирую его , так что мне просто нужно перенести на БД в моем VPN) или любую другую миграцию. Я пытался выполнить миграцию с помощью приложения, и я получаю его при выполнении ./manage migrate admin. Мой settings.py файл выглядит следующим образом:

SHARED_APPS = [
    'django_tenants',
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.auth',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'clients',
]

TENANT_APPS = [
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.auth',
    'django.contrib.sessions',
    'django.contrib.messages',
    # Libs
    'stdimage',
    'django_celery_beat',
    'djcelery_email',
    'tenant_schemas_celery',
    # 'widget_tweaks',
    'bootstrap4',
    'bootstrapform',
    mathfilters,
    'django_filters',
    'sorl.thumbnail',
    # Apps
    'presence',
    'confirmed list',
    'topper',
    'app_users.apps.AppUsersConfig',
]

INSTALLED_APPS = list (set (SHARED_APPS + TENANT_APPS))

AUTH_USER_MODEL = 'app_users.ModelCustomUser'

PUBLIC_SCHEMA_URLCONF = 'myproject.urls_public'

# Django Tenant
TENANT_MODEL = "clients.Client"  # app.Model

TENANT_DOMAIN_MODEL = "clients.Domain"  # app.Model

DATABASE_ROUTERS = (
    'django_tenants.routers.TenantSyncRouter',
)

my models.py (приложение):

class ModelCustomUser (AbstractUser):
    image = ImageField (
        'Image',
        upload_to = 'images',
        default = 'images/new_logo.png',
    )

my forms.py:

class CustomUserCreationForm (UserCreationForm):
    class Goal:
        model = ModelCustomUser
        # Changed when placing the Filters
        fields = ('first_name', 'last_name', 'username', 'email', 'image')


class CustomUserChangeForm (UserChangeForm):
    class Goal:
        model = ModelCustomUser
        fields = ('first_name', 'last_name', 'username', 'email', 'image')

Мой admin.py:

class AdminCustomUser (UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = ModelCustomUser
    # list_display = ['first_name', 'last_name', 'email', 'username', 'image']
    list_display = ['first_name', 'last_name', 'email', 'username', 'image']


admin.site.register (ModelCustomUser, AdminCustomUser)

В моем приложении для клиентов мои models.py:

class Client(TenantMixin):
    name = models.CharField(max_length=100)

    # default true, schema will be automatically created and synced when it is saved
    auto_create_schema = True

    def __str__(self):
        return self.name


class Domain(DomainMixin):
    pass

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

1 Ответ

0 голосов
/ 21 февраля 2020

Моя ошибка была ошибкой новичка. Когда я развернул свое единственное приложение, база данных не изменилась, я оставил db.sqlite3. Когда я перешел на мультитенант, мне пришлось переключиться на PostgreSQL. Моя проблема была в том, что мне нужно было запустить:

python manage.py collectstatic
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...