2017-05-26 83 views
1

我为我的Django应用程序安装了pgcryto扩展使用PostgreSQL数据库。在生产服务器上,我手动创建一个用户,然后运行CREATE EXTENSION pgcrypto;以安装扩展。Django测试与pgcrypto失败

然而,当我运行./manage.py test,因为我的模型是使用来自pgcrypto_expressionsEncryptedTextField场失败,这是自动创建的测试数据库不具有自然安装的扩展(因为它需要创建的每个数据库中明确启用)。在Django设置我的测试数据库并开始迁移的时间之间,如何“注入”代码/命令?

或者说,我该如何在PostgreSQL中启用全局扩展?

+0

您可以创建一个安装扩展的迁移 - 请参阅示例[在文档](https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/operations/#creating-extension-using -migrations)。 – Alasdair

+0

@Alasdair太棒了,正是我所需要的。我已经快速浏览了一下,但是因为我仍然是一个noob,我在哪里放这个代码?任何文件,它会捡起来?我是否需要将它插入到001 _...迁移文件中(但每次都会被覆盖) – strangetimes

+0

我不明白它为什么会被覆盖。它可以进入你喜欢的任何应用程序的迁移文件。理想情况下,将其添加为应用程序的“0001_initial”迁移。只要使用'EncryptedTextField'的任何迁移都将此迁移作为[依赖项](https://docs.djangoproject.com/en/1.11/topics/migrations/#dependencies),就应该可以工作。 – Alasdair

回答

0

在主要来自@Alasdair的帮助下,我能够设置一个位于我的应用程序和其他应用程序之间的虚拟应用程序。然后,我可以调整我的依赖关系,使得构建服务器继续清理实际应用程序中的迁移,同时始终在迁移应用程序之前安装pgcrypto扩展。