Я развернул веб-приложение .Net Core в службе приложений Azure с помощью Azure DevOps. Теперь, когда я пытаюсь создать файл в «D:\home\site\wwwroot» с помощью Kudu, он говорит:
409 Conflict: Could not write to local resource 'D:\home\site\wwwroot\anc' >due to error 'Could not find file 'D:\home\site\wwwroot\anc'.'.
Я заметил, что разрешения для каталога «D:\home\site\wwwroot» отличаются от разрешений в аналогичном веб-приложении, которое я развернул с помощью профиля публикации.
Результат Get-Acl для проблемного приложения:
PS D:\home\site\wwwroot> Get-Acl "D:\home\site\wwwroot"
Get-Acl "D:\home\site\wwwroot"
Directory: D:\home\site
Path Owner Access
---- ----- ------
wwwroot IIS APPPOOL\luncher-dev NT AUTHORITY\SYSTEM Allow FullControl...
Результат Get-Acl в другом подобном приложении:
PS D:\home\site\wwwroot> Get-Acl "D:\home\site\wwwroot"
Get-Acl "D:\home\site\wwwroot"
Directory: D:\home\site
Path Owner Access
---- ----- ------
wwwroot BUILTIN\Administrators Everyone Allow DeleteSubdirectoriesAndFiles,...
Соответствующий конвейер выпуска от Azure DevOps

Как я могу сделать каталог wwwroot доступным для записи?


Do not write
любой файл в wwwroot, когда вы находитесь в облаке. Потому что Azure может изменить ваш компьютер/сервер, и он просто переместит ваши публикуемые gfiles. Не те файлы, которые вы добавили после публикации. Так вы их потеряете.
Спасибо за совет, но речь идет не только о создании новых файлов, но и об удалении существующих файлов
Когда вы развертываете как zip, вы не можете редактировать файловую систему.
Цитата ниже из https://tomasherceg.com/blog/post/azure-app-service-cannot-create-directories-and-write-to-filesystem-when-deployed-using-azure-devops
Я вообще не знал об этой функции, и более того, настройка скрыта в задаче VSTS, поэтому я ее не заметил. Вам нужно развернуть раздел «Дополнительные параметры развертывания» и установить флажок «Выбрать метод развертывания», который по умолчанию не установлен. Только после этих двух кликов вы увидите раскрывающийся список методов развертывания — ZipDeploy используется по умолчанию.
Мне нужно было изменить его, чтобы использовать WebDeploy, чтобы файлы приложения хранились как обычные файлы, и приложение могло писать в файловой системе, как раньше.
У меня была такая же проблема, и мне потребовалась целая вечность, чтобы понять это.
см. ссылку: https://theazureissues.blogspot.com/2019/04/409-conflict-could-not-write-to-local.html
The application setting ‘WEBSITE_RUN_FROM_PACKAGE=1’ of the App Service makes the wwwroot folder of the application as read-only.
Я просто установил это значение на 0, перезапустил приложение, и все вернулось в норму.
Я нашел другую ссылку: https://azureappservices.blogspot.com/2018/06/unable-to-editdelete-files-through-kudu.html который имеет дело с определенными атрибутами файлов, однако я даже не смог редактировать атрибуты после развертывания из devops. Поэтому я считаю, что это исправление для определенных файлов, помеченных как доступные только для чтения.
ИЛИ
проверьте эту ссылку: https://tomasherceg.com/blog/post/azure-app-service-cannot-create-directories-and-write-to-filesystem-when-deployed-using-azure-devops это также может быть
WEBSITE_RUN_FROM_ZIP
установка приложения. (в моем случае это не было проблемой)
Изменить этот КЛЮЧ НАСТРОЙКИ ПРИЛОЖЕНИЯ
WEBSITE_RUN_FROM_PACKAGE = 1 to 0
Этот параметр делает wwwroot файловой системой, доступной только для чтения.
При запуске из пакета это строго соблюдается, поскольку папка wwwroot становится доступной только для чтения.
@Tech-gayan, где найти КЛЮЧ НАСТРОЙКИ ПРИЛОЖЕНИЯ? Я не могу найти WEBSITE_RUN_FROM_PACKAGE, где он находится. Не могли бы вы помочь найти его в инструменте Azure DevOps?
@MdAslam Это настройка приложения. вы можете найти его в разделе конфигурации в соответствующей службе приложений в Azure.
Большое спасибо. Я выполнил поиск в инструменте Azure DevOps.
Когда я меняю 1 на 0 и сохраняю настройку, мой сайт не работает и выдает ошибку 500.37 вот так? любая причина?
Спасибо за ответ. И, пожалуйста, приведите пример для вашего ответа.