csrun и cspack - для чего нужны sitePhysicalDirectories?

Я пытаюсь создать пакет развертывания Azure с помощью cspack на своем сервере сборки для развертывания devfabric (csrun) на тестовом сервере. cspack добросовестно копирует двоичные файлы и файлы веб-ролей в пакет csx, но также требует путь sitePhysicalDirectory для каждой веб-роли, который встроен в файл RoleModel.xml. Этот каталог должен существовать во время пакета.

После развертывания csrun настраивает сайт IIS, который указывает непосредственно на путь sitePhysicalDirectory и полностью игнорирует двоичные файлы веб-ролей, упакованные в пакет csx. Излишне говорить, что тестовое развертывание на другом компьютере не работает.

Я что-то упустил здесь? Почему cspack/csrun не может установить физический путь в IIS для approot в пакете csx? Какова цель пакета csx, если упакованные двоичные файлы не используются? Что делает sitePhysicalDirectories в рабочем развертывании Azure?


person Sam    schedule 17.05.2011    source источник
comment
Я тоже столкнулся с такой же ситуацией и отредактировал физический каталог в файле csx для webrole на тестовом сервере, но рабочая роль по-прежнему не работает и по-прежнему указывает на путь рабочей роли на машине разработчика.   -  person Manish    schedule 06.03.2012
comment
У меня были аналогичные трудности, и в конце концов я отказался от CSPack и вместо этого использовал msbuild. См. здесь: stackoverflow.com/questions/18117994/   -  person acarlon    schedule 13.08.2013


Ответы (3)


Я думаю, что частично это связано с добавлением Full IIS. Раньше ваш каталог approot в Windows Azure предназначался как для процесса RoleEntryPoint, так и для хоста IIS WAS (один и тот же). Однако с полным IIS у вас будет w3wp.exe, выполняющий ваш веб-код, и процесс WaWorker, выполняющий ваш RoleEntryPoint.

Было принято решение эффективно скопировать весь веб-сайт (у которого также есть WebRole.cs RoleEntryPoint) в новый каталог и разместить там полный IIS. Таким образом, вы заметите, что ваш пакет для веб-ролей фактически содержит копию вашего кода дважды. Один раз для веб-сайта и один раз для WebRole.cs RoleEntryPoint. Только ваш RoleEntryPoint теперь выполняется из approot. Я не помню всех технических причин, по которым это произошло, но, возможно, было проще/безопаснее скопировать веб-сайт, чем рисковать пропустить зависимость.

person dunnry    schedule 18.05.2011
comment
Спасибо, это помогает немного прояснить ситуацию. Это, безусловно, было сделано для Full IIS, но в пакете csx НЕТ двух копий кода — у него есть одна копия кода и одна ссылка на код в файловой системе вне пакета. Это нормально для F5 в Visual Studio, но сборка на сервере сборки и развертывание на тестовом сервере не могут быть выполнены без возни с внутренними компонентами пакета. Возникает вопрос, понимают ли инженеры Azure, что обычно подразумевается под термином «пакет». - person Sam; 19.05.2011
comment
Я отмечу вас как ответ, так как понял, что это не особенно хороший вопрос. Примечание для себя: никогда не публикуйте сообщения, если они злы на дерьмовый код фреймворка. - person Sam; 19.05.2011
comment
Да! Жаль ответ... :) Мне придется перепроверить структуру пакета. Мой ответ был правильным в выпуске 1.3, я полагаю, они могли исправить двойную копию в обновлениях 1.4. - person dunnry; 19.05.2011

Я начинаю думать, что ответ на все эти вопросы таков: «Потому что cspack/csrun — это плохо спроектированные груды мусора, которые никогда не должны были поставляться». Кажется, они созданы для поддержки Visual Studio и ни для чего другого.

Ручное обновление файла RoleModel.xml для установки для атрибута PhysicalPath значения «approot» (относительно местоположения RoleModel.xml) после упаковки представляется жизнеспособным обходным путем.

person Sam    schedule 17.05.2011
comment
Сэм, как ты на самом деле решил эту проблему? Мы делаем это прямо сейчас и сталкиваемся с точно такими же проблемами. Я ДЕЙСТВИТЕЛЬНО не хочу делать какое-то удаленное выполнение cspack/csrun на наших внутренних тестовых серверах, на которых размещен эмулятор, но это единственная идея, которая у меня есть на данный момент. - person Jaxidian; 27.08.2011
comment
Мне удалось заставить cspack работать с кучей ручных хаков, но мне никогда не везло с csrun. Я попробовал удаленное взаимодействие psexec и powershell с тестовым сервером, и у обоих были проблемы. Я пришел к выводу, что csrun на самом деле предназначен только для рабочей станции разработчиков, и попытка сделать то, что я делал, была борьбой с инструментами. В итоге мы просто использовали msdeploy для ванильного веб-приложения с использованием отдельного пакета — это может подходить или не подходить для вашей ситуации. - person Sam; 27.08.2011
comment
К сожалению, я прихожу к такому же выводу. Все усугубляется документацией, которая, кажется, скупа, когда дело доходит до мяса. - person acarlon; 08.08.2013

Я думаю, что sitePhysicalDirectory следует установить как папку в AppRoot в вашем пакете csx, а не как источник двоичных файлов и файлов вашей веб-роли.

person Jackie    schedule 26.09.2011