1

我正在尝试部署一个在 App Harbor 上出现以下构建错误的实例

Build FAILED.

"D:\temp\gcp22bmp.ggi\input\src\ShareBill.sln" (default target) (1) ->
"D:\temp\gcp22bmp.ggi\input\src\Sharebill.Database\Sharebill.Database.dbproj" (default target) (5) ->
  D:\temp\gcp22bmp.ggi\input\src\packages\TeamData\Microsoft.Data.Schema.SqlTasks.targets(5,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.TSqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk. [D:\temp\gcp22bmp.ggi\input\src\Sharebill.Database\Sharebill.Database.dbproj]

    0 Warning(s)
    1 Error(s)

我知道这是因为这里通常存在的 sql 目标 - C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\TeamData

部署服务器上不存在。

我现在应该如何部署数据库?有没有其他方法来部署数据库。我没有在 EF 中首先使用代码,但我仍然希望自动应用数据库迁移。

我假设如果我让 db 项目运行,它会自动找到架构差异并将更改应用于数据库。

4

1 回答 1

0

我在 AppHarbor 上托管了一个项目,并使用FluentMigrator来部署我的数据库更改。

实现起来真的很容易,只要按照文档就可以使用他们的流利的接口,甚至只是用它来执行sql。

例如,我从 Global.asax.cs 的 Application_Start 运行以下命令 - 只需将迁移放在与 NOP MigrationMarker 类相同的程序集中:

        const string connectionString = @"Data Source=localhost, 1433;Initial Catalog=testdb;Integrated Security=SSPI;";
        Announcer announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s));
        announcer.ShowSql = true;

        var assembly = Assembly.GetAssembly(typeof(MigrationMarker));
        var migrationContext = new RunnerContext(announcer);

        var options = new ProcessorOptions
                          {
                              PreviewOnly = false, // set to true to see the SQL
                              Timeout = 60
                          };

        var factory = new SqlServer2008ProcessorFactory();
        var processor = factory.Create(connectionString, announcer, options);
        var runner = new MigrationRunner(assembly, migrationContext, processor);

        runner.MigrateUp(true);
于 2013-06-15T19:07:33.547 回答