执行Azure网站暂存交换时,将替换连接字符串

yar*_*arg 13 connection-string azure staging azure-web-sites

(1)我们使用Sql Server(Web Edition)在Azure Web站点上运行Web应用程序.该应用程序包括两个连接字符串

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

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

(2)我把连接字符串放在web.config; 这是"元数据..."(EF)连接字符串被接受的唯一方式(当尝试在Azure网站的控制面板中输入这些连接字符串时,我遇到了各种奇怪的错误).

一切都很好.

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

分阶段的网站工作正常.我为它创建了一个不同的Sql Server,并以与生产站点相同的方式设置其连接字符串(即在web.config中).我处理不同的web.config使用web.config Transformations.(我有另外两个转换 - 用于开发/调试和本地部署/发布)


问题:现在我有一个生产+暂存网站,我尝试做交换.交换效果很好,引入站点的任何更改都会交换到生产中.

但是,交换还从登台站点获取连接字符串,将生产连接到登台数据库.

*这是一个已知的错误?有解决方法吗? (现在我需要在QA测试分阶段网站后直接部署到生产网站 - 这意味着我们网站的停机时间,并且安静地挫败了整个练习的目的)

Lea*_*mes 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")
Run Code Online (Sandbox Code Playgroud)

此命令将2个连接字符串设置为插槽的粘性(遵循上述相同的原理):

Set-AzureWebsite -Name mysite -SlotStickyConnectionStringNames @("myconn", "myconn2")
Run Code Online (Sandbox Code Playgroud)

粘贴到插槽配置是网站范围的配置,并影响该网站中的所有插槽.

编辑:

正如Jeff Treuting在下面的评论中所指出的那样,现在新门户网站有一个"Slot setting"复选框,你可以选择去:

"网络应用程序" - >选择您的网络应用程序 - >"设置" - >"应用程序设置". Azure门户网站图片

  • 我注意到现在在新门户中,所有连接字符串和应用程序设置旁边都有一个"插槽设置"复选框,它与上面的powershell命令完全相同. (5认同)

Her*_*ero 4

暂存环境是一种生产交换模式,允许您在将网站与当前生产系统交换之前完全执行网站升级。它还提供回滚机制,以防升级出现问题。

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

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