【问题标题】:How to restart a dnx website in production?如何在生产中重新启动 dnx 网站?
【发布时间】:2016-05-17 07:46:29
【问题描述】:

我更新了 ASP.NET CORE/ASP.NET 5 RC1 控制器 cs 文件,并进行了编程更改。

该站点之前已在IIS7.5 Windows 2012 Server 上部署在生产环境中,该服务器利用安装在 IIS 中的HTTPPlatformHandler。 这是我必须通过 VPN 访问的远程服务器。 该站点在 IIS 中设置为应用程序,该文件夹指向已部署站点的 wwwroot 目录。

我目前通过右键单击我在Visual Studio 2015 中的项目并选择发布到本地文件夹首先在本地部署它来部署它。然后我将本地文件夹的内容复制到远程网络 IIS7.5 web 服务器站点文件夹中。

如果我将appsettings.json 或更改的.cs 文件复制到服务器,则更改不会反映。

如果我将整个站点复制到生产服务器,我会收到正在使用的文件夹和文件消息。我必须终止“dnx”进程才能在不收到这些消息的情况下进行复制。

据我了解,如果我终止进程 dnx,它将强制重新编译。这是目前我所知道的在更新网站后重启网站的唯一方法,但我想这不是最好的方法。

  1. 更新运行 ASP.NET5 RC1 的生产站点后重新启动网站的标准做法是什么?

  2. 此外,更改我的 app.settings json 文件也不会像更改 web.configASP.NET 4 中那样触发站点重新加载,因此能够重新启动站点很重要。

  3. 如果我在同一个 app pool 上有多个站点,并且我只想在生产中更新一个。如何仅重启一个站点以反映最新更改?

  4. 如果我只能访问共享文件夹而不是 Web 服务器本身,是否可以重新启动网站以反映更改,因为直接更新它不会导致重新编译考虑?

【问题讨论】:

  • 您应该添加有关托管它的位置(Azure、VM、IIS、Linux?)以及如何部署它的信息。至少从 VS 部署到 Azure App Service 总是会重启 App。问题是您的部署工作流程是什么?
  • 更新了帖子。它是 IIS 作为 Web 服务器

标签: iis asp.net-core asp.net-core-mvc


【解决方案1】:

使用IISPlatformHandler,DNX 进程由 IIS 启动(说明在 wwwroot\web.config 中)。

IIS 对您的源文件一无所知,所有请求都转发给 DNX。

DNX 不会监视源文件的更改,因为那里没有 dnx-watch

IIS 仅监视 wwwroot\web.config 文件更改,因此您需要更改/编辑/触摸它以强制 IIS 重新启动网站(和 DNX 进程)。

【讨论】:

  • 我将不得不对此进行测试。当我将本地部署文件夹复制到服务器 ISS 站点文件夹时,如果它说该站点正在使用中,我该如何部署站点?当简单地复制文件时,ASP.NET 4 没有“文件使用问题”
  • “正在使用”的确切文件有哪些?使用我的网站,我可以轻松覆盖.cs和.chtml等文件...唯一锁定的文件是dnx运行时dll和依赖项,但不需要经常更新。
  • 是的,它正在使用 dll。可惜发布没有排除 dll 选项。我将不得不对我的站点进行一些测试,我发现当复制站点并忽略正在使用的文件而不杀死 dnx 然后在浏览器中输入 url 时会导致我的浏览器无限期加载。我只能通过杀死dnx来解决。
【解决方案2】:

我使用msdeploy 进行部署,它具有停止和启动应用程序池的命令,使用这些命令解决了我的文件正在使用错误。 msdeploy的使用方法有很多,下面是我的使用方法。

msdeploy -verb:sync -source:recycleApp -dest:recycleApp="site/pool",recycleMode="StopAppPool",computername=COMPUTERNAME
msdeploy -source:contentPath='SOURCE PATH' -dest:contentPath='\\COMPUTERNAME\wwwroot\' -verb:sync -retryAttempts:2 -disablerule:BackupRule
msdeploy -verb:sync -source:recycleApp -dest:recycleApp="site/pool",recycleMode="StartAppPool",computername=COMPUTERNAME

【讨论】:

  • 您可能会遇到多个站点使用同一个应用程序池并且您需要更新站点而不影响其他站点的情况。然后您不能更新然后重新启动应用程序池。理想情况下,只想更新您的网站。
  • @greay 同意,这并不能解决问题 - 不确定这种情况是否可能,因为 IIS 现在只是一个反向代理,实际的 .NET 进程是分开的。
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 2019-01-02
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多