无法部署到Elastic Beanstalk:ERROR_FILE_IN_USE

时间:2016-07-01 21:09:17

标签: asp.net visual-studio amazon-web-services iis elastic-beanstalk

由于此错误,我的Elastic Beanstalk安装将无法通过Visual Studio进行部署:

2016-07-01 20:45:02,627错误1 AWSBeanstalkCfnDeploy.DeploymentUtils - 部署期间出现异常。 Microsoft.Web.Deployment.DeploymentDetailedClientServerException:Web Deploy无法修改目标上的文件“msvcr100.dll”,因为它已被外部进程锁定。为了使发布操作成功,您可能需要重新启动应用程序以释放锁定,或者在下次发布尝试时使用.Net应用程序的AppOffline规则处理程序。请访问:http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE了解详情。

该链接表明我创建了一个pubxml文件,其中包含启用AppOffline的设置,但此文件似乎仅与使用内置发布功能通过VS发布相关。我没有找到任何证明这适用于AWS的文档。

如何为Elastic Beanstalk部署启用AppOffline?

谢谢!

2 个答案:

答案 0 :(得分:3)

很抱歉,这只是一般性建议,而不是您需要的代码,但解决方案是通过.ebextensions使用挂钩。请参阅http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref-hooks.html

您可以添加powershell脚本的执行以在解压缩更新之前添加app_offline.htm,并在部署更新后将其删除。

我们遇到了类似的问题,但是有问题的DLL(abcPDF,v9)只是被阻止了,因为我们在application_start()期间初始化它的许可,这是EB不喜欢的。所以我们将许可证转移到其他地方。

但是,我认为这种方法可行。

- 哦,也许这个容器命令对你有用。它会在它不适合我们之前回收IIS应用程序池,因为上述许可锁定了DLL。

/。ebextensions / recycleapppool.config

container_commands:

__ recycle_app_pool:

____命令:c:\ windows \ system32 \ inetsrv \ appcmd.exe回收apppool DefaultAppPool

答案 1 :(得分:2)

经过大量的实验,我能找到解决这个问题的唯一工作方法是

// in Project/.ebextensions/reset.config

container_commands:
  00_nuke:
    command: IISReset
    waitAfterCompletion: 0

成本约为4秒的停机时间(在t2.micro上),在此期间你得到503,这当然不是很好。

请注意Github issue for this(在撰写本文时开放)。

如果您有选项,请将您的服务部署到Azure而不是AWS,并且有一些配置选项可以解决该问题(例如环境变量MSDEPLOY_RENAME_LOCKED_FILES) - related Azure specific question