【问题标题】:Why Azure Staging feature replacing connection strings when i do Swap为什么当我进行交换时 Azure 暂存功能会替换连接字符串
【发布时间】:2014-02-12 18:16:59
【问题描述】:

这里是有关新 Azure Staging Feature 的完整详细信息。它说

暂存版本中的某些设置将自动复制到 生产版本——包括连接字符串之类的东西 覆盖、处理程序映射和您可能拥有的其他设置 配置。其他设置,如 DNS 端点、SSL 绑定等 不会改变(确保您无需担心 SSL 证书 用于覆盖生产 URL 证书等的暂存域。

我不明白的是,它说连接字符串是覆盖。当我交换连接字符串时,它们会相互交换。所以在这种情况下,我的登台网站数据库成为生产数据库。我期望的是,它根本不会触及连接字符串,我的生产站点将继续使用相同的数据库,但它使用暂存数据库,因为连接字符串相互交换。

是否可以将登台网站配置为不替换连接字符串?

azure 团队在生产网站上交换原因使用测试数据库不是错误的设计吗?

【问题讨论】:

    标签: azure publish azure-web-app-service


    【解决方案1】:

    不幸的是,这就是现在的设计。 AppSettings 只是环境变量。要在交换上加载不同的环境变量,这将需要重新启动进程,这将破坏此功能的主要要求之一,即消除冷启动时间。

    现在,您可以自动将暂存数据库更改为生产数据库,然后在您交换之前访问您的站点进行预热。但请记住,此功能目前处于预览阶段,有些内容可能会发生变化。

    【讨论】:

    • 谁可以有一个将暂存数据库转变为生产数据库的用例?我认为此功能并非旨在处理在数据库方面存在差异的不同网站版本,因此它目前仅适合 UI 更改。
    • 这不是那么简单,无论 Azure 是否交换连接字符串,您都必须调整您的场景以使用它。假设 azure 有一个生产 connectionstr 和一个暂存连接,并且它们粘在插槽上,这意味着它们不会被交换。然后,您对 vNext 暂存 Db 进行了更改。在进行交换之前,您需要以某种方式对生产数据库进行更新,否则新代码将在旧数据库上运行。这最终取决于您的特定情况。如果您可以为我更多地描述您的场景,这可能会有所帮助。不同的 Dd 架构?在 Db 中测试数据?
    • 我首先使用实体​​框架代码迁移,所以我使用 2 个数据库。当我交换时,我希望我的迁移更新到生产数据库。这是我的用例。实体框架在初始化时已经自动处理数据库更改,但 Azure 不是以这种方式设计的。您说“否则新代码将在旧数据库(模式)上运行”,但在这种情况下,新数据库(模式)不会有来自用户的最新数据更新。
    • EF Code First 迁移在应用启动时运行。当您发布到普通站点时,您的站点将重新启动,并且 EF 有机会运行迁移并更新您的 Db。如果 Azure 网站在交换期间重新启动您的进程以获取新的连接字符串并让 EF 有机会运行,这将违反“无冷启动”要求。如果要在幕后进行,预热,然后进行交换,它可能会起作用,但意味着旧代码将在新 Db 上运行 2 分钟。管理 Azure 网站没有的工件' t 控制(如 Dbs)很棘手。
    • @ahmelsayed 这对我有帮助。但是,您如何建议迁移生产数据库?如果直接发布到生产网站,网站很冷,可以锁定一段时间。如果从登台 Web 服务器迁移生产数据库,生产 Web 服务器将无法访问该数据库并出现错误。 (不幸的是,我今天发现了这条路。)
    猜你喜欢
    • 1970-01-01
    • 2015-05-21
    • 2011-09-16
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多