Travis: "创建测试数据库时出现错误:没有权限创建数据库"

13

这是我的travis.yml文件:

language: python
python:
  - "2.7"
addons:
  postgresql: "9.3"
env:
  - SECRET_KEY=test DB_NAME=dbtest DB_USER=test DB_PASS=test
before_install:
  - export DJANGO_SETTINGS_MODULE=settings.local
  - export PYTHONPATH=$HOME/builds/me/myrepo
install:
 - pip install -r requirements.txt
before_script:
 - psql -U postgres -c 'CREATE DATABASE dbtest;'
 - psql -U postgres -c "CREATE EXTENSION postgis" -d dbtest
 - psql -U postgres -c "CREATE EXTENSION postgis_topology" -d dbtest
 - psql -U postgres -c "CREATE USER test WITH PASSWORD 'test';"
 - psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE dbtest to test;"
 - cd myapp && python manage.py migrate
script:
 - python manage.py test

但是,当我部署代码库并启动Travis时,它会输出以下错误:

10.96s$ pip install -r requirements.txt
0.24s$ psql -U postgres -c 'CREATE DATABASE dbtest;'
0.77s$ psql -U postgres -c "CREATE EXTENSION postgis" -d dbtest
0.09s$ psql -U postgres -c "CREATE EXTENSION postgis_topology" -d dbtest
0.01s$ psql -U postgres -c "CREATE USER test WITH PASSWORD 'test';"
0.01s$ psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE dbtest to test;"
1.89s$ cd myapp && python manage.py migrate
$ python manage.py test
Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Type 'yes' if you would like to try deleting the test database 'test_dbtest', or 'no' to cancel: 

我尝试添加psql -U postgres -c "ALTER USER django CREATEDB;"以便让django用户有权限创建数据库,但是失败了,显示如下:

我尝试添加psql -U postgres -c "ALTER USER django CREATEDB;"以便让django用户有权限创建数据库,但是失败了。
ERROR:  role "django" does not exist
The command "psql -U postgres -c "ALTER USER django CREATEDB;"" failed and exited with 1 during .

你在应用程序的设置文件中定义了用户“test”吗?测试数据库是由USER指定的用户创建的,因此您需要确保给定的用户帐户具有足够的特权。 - Conans
设置文件是指我在上面设置的环境变量。我不明白的是,我可以正常运行 makemigrationsmigrate(因此必须具有足够的权限),但是我无法创建测试数据库。 - Richard
明白了:我需要将用户设置为超级用户:CREATE USER test WITH CREATEUSER PASSWORD 'test'; 然后给予该用户创建数据库的权限:ALTER USER test CREATEDB; - Richard
相关:https://dev59.com/d2Yq5IYBdhLWcg3wzDrk - djvg
相关链接:https://stackoverflow.com/q/14186055 - undefined
1个回答

20
答案:我必须将测试用户提升为超级用户。

答案:我必须将测试用户提升为超级用户。

CREATE USER test WITH PASSWORD 'test'; 

然后给用户授权创建数据库:

ALTER USER test CREATEDB;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接