使用Web Deploy(msdeploy)发布WebMatrix站点

时间:2011-10-23 20:18:20

标签: sql-server-express msdeploy webmatrix

我开始在WebMatrix中构建我的网站,然后切换到使用VS2010,这样我就可以有更好的智能感知和调试。我一直在加载WebMatrix进行部署,它一直运行正常。

但是,加载WebMatrix是一个PITA,我实际上希望在Web部署过程中具有更大的灵活性。

所以我开始学习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)(AWS上的WebMatrix AMI)。

我希望能够将我的数据库推送到主机。我正在尝试使用以下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. ...

我认为我的问题是连接字符串。我从WebMatrix用户界面复制了Server=".\SQLEXPRESS;Initial Catalog=webmatrix_db;Uid=webmatrix_user;Pwd=<pwd>并用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 个答案:

答案 0 :(得分:1)

这与您在合并数据库方面的意见有关...

目前,Web Deploy没有任何支持数据库合并的提供程序 - dbFullSql提供程序使用SQL Server管理对象(“SMO”)来编写db内容的脚本,然后我们将其应用于另一端。因此,Web Deploy实际上只会使用源db覆盖目标数据库。

如果你可以将它作为“合并”,你可以通过使用SMO脚本选项绕过该表已经存在错误 - 这就是WebMatrix所做的使db发布/下载工作的方法。您的来源只需添加: ,scriptDropsFirst =真 (这个脚本会删除源数据库中的所有对象,这样如果它们存在于目标中,它们将被删除并且不会阻止你) 您可能还需要: ,copyAllUsers = FALSE (如果您不是远程SQL数据库上的系统管理员,则可能无法创建登录,这是服务器级别的操作。通常,如果您不使用此设置,则会出现错误关于创建登录,或登录不存在,因为SMO脚本我们的数据库用户为“for LOGIN”并且该登录在服务器上不存在)

希望有所帮助! 克里斯蒂娜