Symfony 如何在使用deployer运行部署时检查是否存在迁移

Symfony 如何在使用deployer运行部署时检查是否存在迁移,symfony,database-migration,php-deployer,Symfony,Database Migration,Php Deployer,我正在使用Deployer将我的Symfony应用程序部署到生产环境中。一切正常,但是,我的deploy.php文件具有用于数据库迁移的命令: /** * Run a diff to generate migrations, */ task('database:diff', function () { run('{{bin/php}} {{release_path}}/' . trim(get('bin_dir'), '/') . '/console doctrine:migrations:

我正在使用Deployer将我的Symfony应用程序部署到生产环境中。一切正常,但是,我的deploy.php文件具有用于数据库迁移的命令:

/**
* Run a diff to generate migrations, 
*/
task('database:diff', function () {

run('{{bin/php}} {{release_path}}/' . trim(get('bin_dir'), '/') . '/console doctrine:migrations:diff --env={{env}} --no-debug --no-interaction');

})->desc('Generate migrations database');

...

after('deploy:symlink','database:diff');
after('database:diff','database:migrate');
但如果数据库没有更改,则此步骤会导致错误

错误消息:

[RuntimeException]                                                                                                                                                                                      

[Doctrine\DBAL\Migrations\MigrationException]                                                                                                                                                         
Could not find any migrations to execute.

我正在寻找一些代码,这些代码可以检查任何数据库更改,并且只有在发生更改时才有条件地运行迁移任务。

嗯,这是一种奇怪的自动迁移和数据库版本控制方法

我们就是这样做的:

每个开发人员都会生成他们的迁移

  • 在实体中添加/删除字段(或创建新实体)
  • 运行
    $php应用程序/控制台原则:迁移:diff
    迁移是在本地创建的
  • 然后,开发人员打开该迁移以确保一切正常,或者添加其他迁移查询/迁移等
  • 然后他们将迁移提交/推送到存储库,以便所有迁移都由git进行版本控制
  • 其他开发人员拉这些迁移,并在必要时在本地机器上运行它们
  • 在部署期间,不需要运行diff,因为所有diff都在git存储库中,所以您只需运行
    database:migrate
    ,即可将prod数据库更新为最新版本


    提示:在生成迁移时,最好为每个实体/数据库表生成一个迁移,就好像某些sql查询在大迁移中会失败一样,很难回滚已经执行的sql查询。

    好吧,这是一种奇怪的自动迁移和数据库版本控制方法

    我们就是这样做的:

    每个开发人员都会生成他们的迁移

  • 在实体中添加/删除字段(或创建新实体)
  • 运行
    $php应用程序/控制台原则:迁移:diff
    迁移是在本地创建的
  • 然后,开发人员打开该迁移以确保一切正常,或者添加其他迁移查询/迁移等
  • 然后他们将迁移提交/推送到存储库,以便所有迁移都由git进行版本控制
  • 其他开发人员拉这些迁移,并在必要时在本地机器上运行它们
  • 在部署期间,不需要运行diff,因为所有diff都在git存储库中,所以您只需运行
    database:migrate
    ,即可将prod数据库更新为最新版本


    提示:在生成迁移时,最好为每个实体/数据库表生成一个迁移,因为如果某些sql查询在大迁移中失败,则很难回滚已执行的sql查询。

    我可以快速询问一下有关此方法的问题吗?我有一个非常相似的,我想知道。。。如何使用deployer执行回滚?我的意思是,假设我们有刚刚部署的版本5,执行了2次迁移,现在我想回滚到版本4,您是否以某种方式实现了自动化?关于这种方法,我可以问一个简短的问题吗?我有一个非常相似的,我想知道。。。如何使用deployer执行回滚?我的意思是,假设我们有刚刚部署的版本5,执行了2次迁移,现在我想回滚到版本4,您是否以某种方式实现了自动化?