我开始在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成功连接并执行命令,我需要弄清楚如何使它实际合并数据库。现在它给我一个错误,表已经存在并且无法创建它......
答案 0 :(得分:1)
这与您在合并数据库方面的意见有关...
目前,Web Deploy没有任何支持数据库合并的提供程序 - dbFullSql提供程序使用SQL Server管理对象(“SMO”)来编写db内容的脚本,然后我们将其应用于另一端。因此,Web Deploy实际上只会使用源db覆盖目标数据库。
如果你可以将它作为“合并”,你可以通过使用SMO脚本选项绕过该表已经存在错误 - 这就是WebMatrix所做的使db发布/下载工作的方法。您的来源只需添加: ,scriptDropsFirst =真 (这个脚本会删除源数据库中的所有对象,这样如果它们存在于目标中,它们将被删除并且不会阻止你) 您可能还需要: ,copyAllUsers = FALSE (如果您不是远程SQL数据库上的系统管理员,则可能无法创建登录,这是服务器级别的操作。通常,如果您不使用此设置,则会出现错误关于创建登录,或登录不存在,因为SMO脚本我们的数据库用户为“for LOGIN”并且该登录在服务器上不存在)
希望有所帮助! 克里斯蒂娜