如何在Azure中设置部署,以便根据环境使用不同的数据库?

时间:2012-04-02 14:23:09

标签: database azure

您可以通过交换VIP来轻松地在Azure管理门户中的登台和生产环境之间交换两个部署。在处理暂存版本的服务时,我们也希望使用临时数据库,因此我们不会冒险破坏实际的客户数据。但是,在交换暂存和生产服务之后,现在生产(以及之前的暂存)部署显然应该适用于生产数据库。

所以基本上要使用的数据库取决于实例是在 Staging 还是 Production 环境中运行。有没有一个很好的方法来实现这一目标?我想,依靠VIP和硬编码数据库切换可能不是最好的主意。

3 个答案:

答案 0 :(得分:11)

我的建议是停止使用您使用传统“临时环境”的功能的服务的“临时插槽”。当我与人们谈论Windows Azure时,我强烈建议他们仅使用暂存插槽在新部署上线之前对其进行冒充测试。如果他们想要更长时间的测试,那么我们很多人都习惯使用内部部署,然后使用单独的服务,甚至可能使用单独的订阅(如果您希望成本透明,则后者很好)。

所有这些说明,您唯一真正的选择是在执行VIP交换之前有一个特定于您更新的生产的第二个服务配置,或者您编写一些允许服务检测它所在的插槽的代码拉出适当的两个配置设置。

然而,正如我在第一段所述,我认为有更好的方法可以做。 :)

答案 1 :(得分:6)

在Azure网站的最新版本中,这里的故事发生了变化。您现在可以指定任何应用程序设置或连接字符串是"插槽设置",将其固定到特定插槽。要解决您的问题,您只需在每个插槽中设置连接字符串,并注意检查'插槽设置'。

我现在不太清楚这是否是一种可行的方法。数据库架构迁移和回滚还没有完成,我不确定如何正确处理它。此外,只有应用程序设置和连接字符串以这种方式工作,因此,例如,system.net.mail设置无法固定到插槽。为此,您需要更改代码以从应用设置中获取邮件服务器信息等,或者使用其他方法。

答案 2 :(得分:2)

Re:“在处理暂存版本的服务时,我们也希望使用临时数据库,因此我们不会冒险破坏实际的客户数据。”没有内置的方法来做到这一点。

如果您希望在没有生产数据风险的情况下进行测试,请考虑在另一个Azure帐户中进行此测试 - 该帐户甚至无法访问生产数据库。然后,当您认为系统已经过测试并准备好上线时,只需将其放入生产实例旁边的临时插槽中进行最终的烟雾测试。

我可以想象在执行VIP交换之前您还希望在登台实例上运行几个场景但不想污染生产数据的场景。为此,许多公司使用特殊帐户 - 与这些帐户相关联的数据已知(或以某种方式标记)不是来自真实客户,因此可以在报告和计费等中跳过。

回复:“我认为,依靠VIP和硬编码数据库切换基于这可能不是最好的主意。”如果通过硬编码,你的意思是从配置文件中读取它,这可能不是一个坏主意,如果你使用上面提到的方法。我听说有些人会“弄清楚我们是否处于一个临时插槽中并在代码中做了不同的事情”,但我更推荐我上面描述的内容。