使用门户更改Azure应用程序设置而不重新启动

时间:2017-04-18 20:48:51

标签: azure azure-web-sites appsettings

我有时会这样:

在Azure门户中,我转到“App Services”,然后点击我的网络应用程序,然后转到“应用程序设置”。

这里我从“应用程序设置”列表中更改了一个值:

App Settings in Azure Portal

EG。我将“128”更改为“129”

最后,我点击“保存”。

这会导致我的网络应用重启。我不希望这样。

问题:有没有办法在不重启的情况下手动更改此值?如果没有,我应该以另一种方式存储这个值吗?也许在web.config中使用一个我可以每次上传的新部分?

如果我使用新的部分,例如:

<moreAppSettings configSource="moreSettings.config">
</moreAppSettings>

这个moreSettings.config是这样的:

<?xml version="1.0" encoding="utf-8"?>
<moreSettings>
   <add key="ClientAppBuild" value="129" />
</moreSettings>

我可以在不重启的情况下上传和覆盖单个.config文件吗?

3 个答案:

答案 0 :(得分:3)

通过Azure门户编辑应用程序设置与编辑web.config文件的方式相同。因此,这将导致重新启动托管Web应用程序的IIS应用程序池。这在Azure App Service中的工作方式与在任何Windows Server上使用IIS的方式完全相同。

如果您在更新特定设置时不想重新启动应用程序池,那么您需要将它们存储在其他位置。如果要存储简单的键/值对,则可以将其存储在使用应用程序部署的JSON或XML文件中,或者可以使用Azure存储表或Redis缓存等键/值存储服务。您也可以将Key / Value对存储在应用程序数据库中。无论您将它存储在何处,您都可能希望实现某种缓存,这样您就不必在每次访问时都从存储中读取值。

答案 1 :(得分:2)

如果你所追求的只是一个你可以在运行时修改的键值存储,为什么不使用专门为此设计的东西,比如Table StorageRedis Cache

如果您只是尝试存储您的构建号,只需在项目中部署一个静态VERSION文件(由源代码控制未跟踪),并在构建时增加内部版本号。您需要将此文件保留在wwwroot之外(并在d:\home\site\somethingElse下),以便下一次部署不会清除它。

如果您将源代码控制连接到Kudu以进行持续集成,则可以获取当前/活动提交ID (如果您不回滚,它也代表您最新构建的提交)和一些通过调用Kudu的/api/deployments

来做其他有趣的事情

http is like curl but different

$ http https://SiteUsername:SitePassword@sitename.scm.azurewebsites.net/api/deployments

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
...
{
    "active": true,
    "author": "snobu",
    "deployer": "GitHub",
    "end_time": "2017-03-29T08:47:08.954981Z",
    "id": "5ada48724129c78b8a993b4a25f2144aec03cbd2",
    "message": "Changed bootstrap theme to Flatly",
    ...

有关该API的更多信息,请访问https://github.com/projectkudu/kudu/wiki/REST-API#deployment

这比人工构建号更有意义。您可以安全地将site-level credentials存储为应用程序设置,并构建/api/deployments URL,而无需编写密码。

答案 2 :(得分:0)

我可以想到的另一个解决方案是有2个部署插槽,

  • 生产
  • 预生产

预生产是与生产具有类似配置的插槽,以实现零停机时间。

所以逐步是:

  1. 将新配置添加到预生产版本
  2. 等待预生产恢复
  3. 将100%的流量从生产路由到生产前

重复第1步和第2步进行生产,然后将流量返回生产。