Heroku 不允许我重命名数据库,因此不能 运行 Django 单元测试?
Heroku won't allow me to rename DB and thus can't run Django unit tests?
我正尝试通过 python manage.py test --settings="app.test-settings"
运行 Django 测试
下面的设置文件
#Testing On Heroku DB
from changeaddress.settings import *
import dj_database_url
TEST_DATABASES = {
'default': dj_database_url.parse(os.getenv('TEST_DATABASE_URL'))
}
TEST_DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
REDIS_CACHE_TYPE = None
POSTGIS_VERSION = (2, 0, 3)
TEST_RUNNER = 'changeaddress.test_suite_runner.HerokuTestSuiteRunner'
当 运行进行测试时,出现上述错误。
File "C:\Python27\lib\site-packages\django\db\utils.py", line 99, in
__exit__ six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 51,
in execute return self.cursor.execute(sql)
django.db.utils.ProgrammingError: type "geography" does not exist LINE 17: "area" geography(MULTIPOLYGON,4326),
我找到了这个 Testing a GeoDjango app with a PostGIS database 但我无法对 "template_postgis" 进行任何更改,因为我没有权限。
我无法使用 sqlite
,因为我的模块使用了数据库的 POSTGIS 选项。通过错误并终止测试...
有没有办法在不破坏 Django 源代码的情况下做到这一点?
因为我需要得到它才能 运行 on CircleCI.
更新
没有一个很好的方法可以使它与 HEROKU 一起工作。目前,我已将所有内容都推到仅在 Circle CI.
上进行测试
一如既往的感谢!
确定您的方法是正确的。持续集成是在将代码发送到生产环境之前测试代码的方法。 Heroku 的 buildpacks 做得很好,但它不是一个很好的环境来测试那些不是 "usual" Web 开发的东西。
关于您在 heroku 上的 PostGIS 问题,请查看 Heroku 文档中的评论:
PostGIS is available in public beta. The beta is available on all
Production tier databases and currently supports PostGIS version 2.0.
It is not available on the Dev or Basic Hobby tier plans. PostGIS is
only available with Postgres 9.2 databases provisioned after April 20,
2013 and all Postgres 9.3 database. To enable PostGIS once connected
to your PostgreSQL 9.2 database run:
CREATE EXTENSION postgis;
确保您使用的不是 2.0 以上的版本,也不是 运行 在开发或基本数据库环境中。
同样,恕我直言,您应该在 circle-ci 持续集成环境中执行此操作,然后将生成的工件推送到 Heroku。
我正尝试通过 python manage.py test --settings="app.test-settings"
下面的设置文件
#Testing On Heroku DB
from changeaddress.settings import *
import dj_database_url
TEST_DATABASES = {
'default': dj_database_url.parse(os.getenv('TEST_DATABASE_URL'))
}
TEST_DATABASES['default']['ENGINE'] = 'django.contrib.gis.db.backends.postgis'
REDIS_CACHE_TYPE = None
POSTGIS_VERSION = (2, 0, 3)
TEST_RUNNER = 'changeaddress.test_suite_runner.HerokuTestSuiteRunner'
当 运行进行测试时,出现上述错误。
File "C:\Python27\lib\site-packages\django\db\utils.py", line 99, in
__exit__ six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 51,
in execute return self.cursor.execute(sql)
django.db.utils.ProgrammingError: type "geography" does not exist LINE 17: "area" geography(MULTIPOLYGON,4326),
我找到了这个 Testing a GeoDjango app with a PostGIS database 但我无法对 "template_postgis" 进行任何更改,因为我没有权限。
我无法使用 sqlite
,因为我的模块使用了数据库的 POSTGIS 选项。通过错误并终止测试...
有没有办法在不破坏 Django 源代码的情况下做到这一点? 因为我需要得到它才能 运行 on CircleCI.
更新
没有一个很好的方法可以使它与 HEROKU 一起工作。目前,我已将所有内容都推到仅在 Circle CI.
上进行测试一如既往的感谢!
确定您的方法是正确的。持续集成是在将代码发送到生产环境之前测试代码的方法。 Heroku 的 buildpacks 做得很好,但它不是一个很好的环境来测试那些不是 "usual" Web 开发的东西。
关于您在 heroku 上的 PostGIS 问题,请查看 Heroku 文档中的评论:
PostGIS is available in public beta. The beta is available on all Production tier databases and currently supports PostGIS version 2.0. It is not available on the Dev or Basic Hobby tier plans. PostGIS is only available with Postgres 9.2 databases provisioned after April 20, 2013 and all Postgres 9.3 database. To enable PostGIS once connected to your PostgreSQL 9.2 database run: CREATE EXTENSION postgis;
确保您使用的不是 2.0 以上的版本,也不是 运行 在开发或基本数据库环境中。
同样,恕我直言,您应该在 circle-ci 持续集成环境中执行此操作,然后将生成的工件推送到 Heroku。