Django测试错误“创建数据库的权限被拒绝” - 使用Heroku Postgres

时间:2014-02-24 03:50:54

标签: python django postgresql testing heroku

我正在尝试使用Django App目录中的tests.py文件(mysite / polls / tests.py)进行简单的Django测试,但每次运行'python manage.py test polls'时,我都会得到错误:

C:\Python27\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 3.0\helpers\pycharm\django_test_manage.py" test polls "C:\Users\<myname>\PycharmProjects\mysite"
Testing started at 8:40 PM ...
Creating test database for alias 'default'...
Type 'yes' if you would like to try deleting the test database 'test_<database>', or 'no' to cancel: Got an error creating the test database: permission denied to create database

根据我的阅读,显然Heroku PG使用共享数据库,因此我没有创建/销毁数据库的权限,这是测试所必需的。这有明显的解决方案吗?我仍然在我的本地驱动器上开发,所以任何变通办法都会受到赞赏。我知道测试是编程的一个重要部分,所以我希望能够尽快实现测试方法。

我正在尝试使用TestCase django类进行测试。

我在用什么:
1)Heroku Postgres爱好开发计划
2)Postgres 9.3.3
3)Python 2.7.6
4)Django 1.6.1


编辑: 所以在做了一些研究之后,我发现我可以在settings.py中覆盖我的DATABASES dict变量来使用SQLite在本地测试(当'test'是shell中的参数时),但我仍然更喜欢一个PostgreSQL实现,因为从我读到的,PostgreSQL更严格(我是它的粉丝)。

对于任何对我发现的半解决方案感兴趣的人(由Stackoverflow的另一名成员提供):

if 'test' in sys.argv:
    DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}

不要忘记导入sys

1 个答案:

答案 0 :(得分:-2)

您没有理由需要使用测试创建数据库。相反,如果未定义DATABASE_URL环境变量,请更改测试以访问本地数据库。这是我在Node.js中所做的,我有本地测试和开发数据库,​​以及Heroku提供的生产数据库:

if (typeof(process.env.DATABASE_URL) !== 'undefined') {
  dbUrl = url.parse(process.env.DATABASE_URL);
}
else if (process.env.NODE_ENV === 'test') {
  dbUrl = url.parse('tcp://postgres:postgres@127.0.0.1:5432/test');
}
else {
  dbUrl = url.parse('tcp://postgres:postgres@127.0.0.1:5432/db');
}