执行 Azure Web Site 演练交换时,连接字符串会被替换。

13

(1) 我们在Azure Web Site上运行一个Web应用程序,使用Sql Server(Web Edition)。该应用程序包含两个连接字符串:

  • DefaultConnection - 普通连接字符串,格式为 Server=tcp:{my-sql-server}.database.windows.net,1433;Database=...)。

  • EFConnection - 实体框架连接字符串。由于我正在使用EF设计师(并喜欢它),所以需要使用以metadata=res://*/Models.EDM...形式的连接字符串

(2) 我已将连接字符串放置在web.config中;这是接受“metadata ...”(EF)连接字符串的唯一方法(当尝试在Azure网站控制面板中输入这些连接字符串时,我得到各种奇怪的错误)。

一切都很好。

(3) 接下来,我向我们的网站添加了一个分阶段开发的分段插槽,如Microsoft Azure Web Sites上的分段部署中所述

暂存站点运行良好。我为其创建了一个不同的Sql Server,并以与生产网站相同的方式设置其连接字符串(即在web.config中)。我使用web.config Transformations处理不同的web.config。(我还有另外2个变换-用于开发/调试和本地部署/发布)


问题:现在我有一个生产+暂存站点,我尝试进行交换。交换运行良好,并将任何引入到暂存站点的更改交换到生产环境。

但是,交换也将连接字符串从暂存站点带出,将生产连接到了暂存数据库中。

*这是已知的错误吗?是否有解决方法?(目前,一旦QA测试了暂存站点,我需要直接部署到生产站点-这意味着我们的网站会停机,完全打败了整个练习的目的)

5个回答

11

应用程序设置和连接字符串不会随着插槽而保留,当交换时它们将保留在网站中,但我们可以使用PowerShell命令配置选定的应用程序设置和连接字符串以成为插槽所附着的(该功能目前Azure门户不支持)。

在Azure PowerShell中使用此命令将2个应用程序设置设置为插槽所附着的:

/* If you have one config */
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot")

/* If you have more than one */
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")

并使用此命令将2个连接字符串设置为与插槽相关(遵循上述相同的原则):

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")

粘性到插槽配置是整个网站的配置,会影响该网站中的所有插槽。

编辑:

如评论区下Jeff Treuting所指出的,现在新门户有一个“插槽设置”复选框,您可以通过以下方式选择:

"Web Apps" -> 选择您的 Web 应用程序 -> "设置" -> "应用程序设置"。 Azure Portal Image


5
我发现在新门户中,所有连接字符串和应用程序设置旁边都有一个“插槽设置”复选框,它执行与上述 PowerShell 命令相同的操作。 - Jeff Treuting
1
我在新门户中进行Swap时仍然看到警告,它认为生产环境中不存在连接字符串(实际上存在且名称相同)。 - kamranicus
connectionstring 的值格式是什么?如果您知道,请添加。 - ManirajSS
我应该将类似于 Server=tcp:xxxxxxxxxx.database.windows.net;Database=testDB;User ID=MyAdmin@xxxxxxxxxx;Password=pass@word1;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;MultipleActiveResultSets=true 的内容放在值文本框中吗? - ManirajSS
@ManirajSS,请看这里:www.connectionstrings.com - Leandro Gomes

4

Staging环境是一种生产交换模式,允许您在将其与当前生产系统交换之前完全升级您的网站。如果升级出现问题,它还提供了回滚机制。

也许对于那些使用这个术语来表示尽可能接近生产的QA环境的公司来说,Staging这个词有点误导。在Microsoft Azure中,Staging环境是一个预生产概念,允许您预配置和测试网站的升级。

QA环境应该有自己的环境。


1
Azure网站的部署插槽功能允许在将客户流量定向到该版本之前,在目标平台上验证您网站的完整内容和配置更新。预期是在执行交换之前,部署插槽将被完全配置为所需的目标格式。交换操作不会对源部署插槽应用转换,它会无缝地重定向Web流量。
简化验证和预交换更新工作流程的一个想法是使用EF连接字符串的应用程序设置。

0

因此,我们应该将Azure“暂存”用作部署的另一步骤 - 这是一种用于确保立即部署而不会导致站点停机的方法?

在这种情况下,我仍然可以将其用作QA环境,并在与生产环境交换之前重新配置。


是的,暂存的唯一目的是支持零停机部署。QA 应该在单独的云服务部署上执行。 - Eric

0
FWIW,你可以通过以下步骤在Azure门户中保存EF连接字符串:(a) 复制并粘贴整个字符串,位于引号之间;(b) 将内部连接字符串周围的HTML实体修改引号替换为实际的双引号;(c) 在Azure控制台中选择"Custom"作为数据库类型。

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