Использование Web Deploy (msdeploy) для публикации сайта WebMatrix - PullRequest
2 голосов
/ 24 октября 2011

Я начал создавать свой сайт в WebMatrix, а затем переключился на использование VS2010, чтобы у меня было больше возможностей для Intellisense и отладки. Я загружаю WebMatrix для развертывания, и он работает нормально.

Однако загрузка WebMatrix - это PITA, и я действительно хочу большей гибкости в процессе веб-развертывания.

Итак, я начал изучать msdeploy.exe и как его использовать. Мне удалось успешно синхронизировать сайт, как я хотел, с помощью следующей командной строки:

msdeploy.exe
  -verb:sync 
  -dest:iisApp=MySite,wmsvc=www.mysite.com,username=administrator,password=blahblahblah
  -allowUntrusted 
  -skip:absolutePath=webdeploy.cmd 
  -skip:absolutePath=web.config 
  -skip:objectName=dirPath,absolutePath="App_Data" 
  -skip:objectName=dirPath,absolutePath="bin" 
  -skip:absolutePath=vwd.webinfo 
  -source:iisApp="C:\Users\charlie\Documents\Visual Studio 2010\WebSites\MySite"

Мне пришлось использовать -allowTrusted, потому что сертификат на сервере использует другое имя хоста, чем www. Нет, важная персона. У меня есть -skips для вещей, которые я тоже не хочу писать в Dest.

Все отлично работает.

Я использую SQL Server (Express) на своем хосте (AMI WebMatrix на AWS).

Я хочу иметь возможность передавать свою базу данных на хост. Я пытаюсь использовать следующую команду msdeploy:

msdeploy.exe 
    -verb:sync 
    -source:dbFullSql="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=C:....\MySite.mdf;User instance=true" 
    -dest:dbFullSql="Server=www.mysite.com\SQLEXPRESS;Initial Catalog=webmatrix_db;Uid=webmatrix_user;Pwd=<pwd>"

Это дает мне

Error: The database 'webmatrix_db' could not be created.
Error: A network-related or instance-specific error occurred while establishing aa
connection to SQL Server. The server was not found or was not accessible. ...

Я думаю, что моя проблема в строке подключения. Я скопировал Server=".\SQLEXPRESS;Initial Catalog=webmatrix_db;Uid=webmatrix_user;Pwd=<pwd> из пользовательского интерфейса WebMatrix и добавил к нему www.mysite.com, думая, что где-то нужно мое имя хоста.

Очевидно, что это не правильно, и я не могу найти примеры строк подключения, которые также работают.

Обратите внимание, что SQL не предоставляется непосредственно этим сервером. Я предполагаю, что вызов WebMatrix для msdeploy соединяется с использованием моих учетных данных администратора (не учетных данных SQL), а затем msdeploy вызывает команды SQL на удаленном хосте. Мне нужно что-то вроде ...wmsvc=www.mysite.com,username=administrator,password=blahblahblah в опции -dest первого примера, который я привел выше.

Было бы замечательно, если бы я видел журнал того, как WebMatrix вызывал msdeploy.

Какая правильная команда msdeploy делает то, что я хочу?

[ОБНОВЛЕНИЕ - ОТВЕТ]

Одна из лучших вещей в StackOverflow - это то, что публикация вопроса действительно заставляет вас задуматься о том, что вы делаете. Вскоре после того, как я опубликовал вышеизложенное, я понял, что ключом является параметр wmsvc=www.mysite.com,username=administrator,password=blahblahblah в параметре -dest. Возник вопрос, как правильно добавить его в мой конкретный пример.

Эта командная строка msdeploy теперь подключается правильно:

msdeploy.exe -verb:sync -source:dbFullSql="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=C:\Users\charlie\Documents\Visual Studio 2010\WebSites\Fiinom\App_Data\MySite.mdf;User instance=true" -dest:dbFullSql="Server=.\SQLEXPRESS;Initial Catalog=webmatrix_db;Uid=webmatrix_user; Pwd=rI2vP3rK6hV8nN8",wmsvc=www.mysite.com,username=administrator,password=blahblahblah -allowUntrusted

Теперь, когда msdeploy успешно подключается и выполняет команды, мне нужно выяснить, как заставить его фактически объединить базу данных. Сейчас я получаю сообщение об ошибке, что таблица уже существует и не может ее создать ...

1 Ответ

1 голос
/ 18 июля 2012

Это связано с вашим дополнительным комментарием о слиянии базы данных ...

В настоящее время в Web Deploy нет провайдера, который поддерживает слияния базы данных - провайдер dbFullSql использует объекты управления SQL Server ("SMO") дляСценарий содержимого базы данных, а затем мы применим его на другой стороне.Таким образом, Web Deploy эффективно перезапишет только целевую базу данных с исходной базой данных.

Если вы согласны с этим в качестве «слияния», вы можете обойти эту таблицу с уже существующей ошибкой, используя опции сценариев SMO - это то, что делает WebMatrix для работы публикации / загрузки БД.К вашему источнику просто добавьте:, scriptDropsFirst = true (этот сценарий исключает все объекты в вашей исходной базе данных, так что если они существуют в месте назначения, они будут отброшены и не заблокируют вас). Возможно, вам также понадобится:, copyAllUsers =false (если вы не являетесь системным администратором в удаленной базе данных SQL, скорее всего, вы не сможете создавать логины, которые являются действием на уровне сервера. Обычно, если вы не используете этот параметр, вы получитеошибка при создании логина, или логин не существует, потому что SMO записывает пользователя вашей базы данных как «для входа в систему», и этот логин не существует на сервере)

Надеюсь, это поможет!Kristina

...