【问题标题】:Django test database usernameDjango 测试数据库用户名
【发布时间】:2018-12-07 04:22:17
【问题描述】:

我正在启动一个 Django 项目,我在共享运行器上使用 gitlab 的 ci/cd,我使用 Postgres 作为数据库。 我有一个奇怪的问题,似乎 Django 正在使用用户名“postgres”创建测试数据库,我找不到配置它的设置并将其更改为使用名为“runner”的角色的方法。这会导致我的 ci/cd 管道中断。

这是我的.gitlab-ci.yml

image: python:3.6.5

services:
  - postgres:latest

variables:
  POSTGRES_DB: asdproject
  POSTGRES_USER: runner
  POSTGRES_PASSWORD: asdpassword

test:
  script:
  - whoami
  - export DATABASE_URL=postgres://postgres:@postgres:5432/asdproject
  - export PGPASSWORD=$POSTGRES_PASSWORD
  - apt-get update -qy
  - apt-get install -y python-dev python-pip
  - pip install -r requirements.txt
  - python manage.py test -   settings=asd.gitlab_runner_settings

还有我的gitlab_runner_settings.py 文件:

我尝试了许多在问题中推荐的更改 settings.py 的形式,但都没有奏效。

from asd.with_debug_settings import *
import sys

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'asdproject',
        'USER': 'runner',
        'PASSWORD': 'asdpassword',
        'HOST': 'postgres',
        'PORT': '5432',
        'TEST': {
            'NAME': 'asdtest',
            'USER': 'runner'
        },
    }
}

我在 gitlab 中运行管道脚本时遇到的错误是:

---------------------------------------------------------------------
Ran 0 tests in 0.000s

OK
Using existing test database for alias 'default'...
System check identified no issues (0 silenced).
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
return self.cursor.execute(sql)
psycopg2.ProgrammingError: role "postgres" does not exist


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
  File "/usr/local/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/test.py", line 26, in run_from_argv
super().run_from_argv(argv)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
  File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/test.py", line 56, in handle
failures = test_runner.run_tests(test_labels)
  File "/usr/local/lib/python3.6/site-packages/django/test/runner.py", line 607, in run_tests
self.teardown_databases(old_config)
  File "/usr/local/lib/python3.6/site-packages/django_heroku/core.py", line 41, in teardown_databases
self._wipe_tables(connection)
  File "/usr/local/lib/python3.6/site-packages/django_heroku/core.py", line 33, in _wipe_tables
"""
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
  File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/usr/local/lib/python3.6/site-packages/django/db/backends/utils.py", line 83, in _execute
return self.cursor.execute(sql)
django.db.utils.ProgrammingError: role "postgres" does not exist

ERROR: Job failed: exit code 1

【问题讨论】:

    标签: python django postgresql gitlab-ci-runner


    【解决方案1】:

    你需要有一个主机

    'HOST': 'postgres',
    

    这是错误的

    应该是'localhost'或者远程服务器ip的地址

    【讨论】:

    • 我是从gitlab自己的文档中使用的。这是正确的,它与服务链接到跑步者的方式有关。
    【解决方案2】:

    发生错误是因为当 gitlab-ci 运行测试时,它会根据您在 yml 文件中设置的设置创建数据库:

    variables:
      POSTGRES_DB: asdproject
      POSTGRES_USER: runner
      POSTGRES_PASSWORD: asdpassword
    

    所以runner 角色和asdproject 数据库被创建。 但是您将数据库 url 设置为 DATABASE_URL=postgres://postgres:@postgres:5432/asdproject postgres 用户设置的位置。

    请尝试DATABASE_URL=postgres://runner:asdpassword@postgres:5432/asdproject

    【讨论】:

    • 它没有解决任何问题。我什至评论了定义DATABASE_URL 的行并获得了相同的输出。
    • 您的应用是否在 DATABASE settingspostgres 用户中使用?不在测试中,而是在通用设置中?
    • 如果你的意思是在 Django 的主 settings.py 文件中,不,我没有。
    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2016-05-29
    • 2011-06-16
    • 2020-05-02
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多