Непрерывная интеграция Azure с перезаписью App_Data, даже если файл WebDeploy указан для исключения данных приложения.

У меня есть веб-сайт Windows Azure, и я настроил непрерывную интеграцию Azure с размещенным Team Foundation Server. Я вношу изменения в свою локальную копию, фиксирую их в TFS, и они публикуются в Azure. Это здорово, проблема в том, что у меня есть база данных Access в папке ~\App_Data\, и когда я возвращаюсь, копия в Azure перезаписывается.

Я настроил профиль публикации веб-развертывания на «Исключить App_Data» и настроил задачу сборки на использование профиля веб-развертывания, и теперь он УДАЛЯЕТ мою папку ~\App_Data\.

Есть ли способ настроить непрерывную интеграцию Azure, чтобы развернуть все и оставить App_Data в покое?


person Nate    schedule 22.04.2013    source источник
comment
Похоже, вы могли бы использовать «правило пропуска», хотя я еще не пытался сделать это с Azure. Эти ссылки могут оказаться полезными: stackoverflow.com/questions/4289440/ и stackoverflow.com/questions/12576662/ и < a href="http://blog.richardszalay.com/2012/12/18/demystifying-msdeploy-skip-rules/" rel="nofollow noreferrer">blog.richardszalay.com/2012/12/18/   -  person Jason Haley    schedule 23.04.2013
comment
@JasonHaley Как уже отмечалось, я настроил веб-развертывание, чтобы пропустить папку App_Data, но проблема в том, что после публикации у меня НЕТ папки App_Data, а не той, которая была там раньше, и не той, которая была в моем исходном контроле. Его просто нет. Это большая боль, и я надеюсь, что просто делаю что-то не так, но я не могу понять, что это такое.   -  person Nate    schedule 06.06.2013


Ответы (1)


Я использую инструмент «Публикация в Интернете» в Visual Studio, но я думаю, что принципы те же:

  • если вы измените файл локально и опубликуете, он перезапишет все, что находится в Интернете.
  • если у вас нет локального файла, но файл существует в Интернете, он все равно будет существовать в Интернете после публикации

Папка App_Data по умолчанию не обрабатывается особым образом. В этом есть смысл — если вы изменили файл .aspx или .jpg локально, вы бы хотели, чтобы последняя версия была размещена в Интернете, верно?

Я также использую App_Data для хранения некоторых файлов, которые я хочу, чтобы веб-сервер (код ASP.NET) модифицировал и чтобы он оставался актуальным в Интернете.

Решение состоит в следующем:

  1. Разрешить веб-публикации загружать App_Data, без исключений.
  2. Не храните файлы в App_Data (локально), которые вы хотите изменить в Интернете.
  3. Пусть веб-сервер отвечает за создание и изменение файлов исключительно.

В идеале вам не нужно менять какой-либо код, и сервер может создать пустой файл, если это необходимо для начала работы.

Однако, если вы должны начать с некоторого содержимого, например, с нового пустого файла .mdf, вы можете сделать следующее:

  1. Локально/в исходном репозитории создайте App_Data/blank.mdf (это будет отправной точкой, а не рабочим файлом).
  2. В Global.asax измените «Application_Start», чтобы создать реальный рабочий файл .mdf из пустого начального файла:

    // If the real file doesn't exist yet (first run),
    // then create it using a copy of the placeholder.
    // If it exists then we re-use the existing file.
    string real_file = HttpContext.Current.Server.MapPath("~/App_Data/working.mdf");
    if (!File.Exists(real_file))
        File.Copy(HttpContext.Current.Server.MapPath("~/App_Data/blank.mdf"), real_file);
    
person Yoshi    schedule 21.07.2013