在 运行 使用 deployer 部署时如何检查是否有迁移
How can you check if there are migrations while running a deploy using 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: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.
我正在寻找一些可以检查任何数据库更改的代码,并且只有在有更改时才有条件地 运行 迁移任务。
嗯,这是一种奇怪的自动化迁移和数据库版本控制方法。
我们就是这样做的:
每个开发人员都会生成他们的迁移;
- Add/remove 实体中的字段(或创建新实体)
- 运行
$ php app/console doctrine:migrations:diff
迁移是在本地创建的。
- 开发人员然后打开该迁移以确保一切正常,或者添加他们的额外迁移 queries/migrations 等
- 然后他们 commit/push 迁移到存储库,以便所有迁移都由 git 控制版本。
- 其他开发人员提取这些迁移,并在必要时 运行 在他们的本地计算机上进行迁移。
在部署期间,不需要 运行 diff,因为所有的 diff 都在 git 存储库中,所以您只需 运行 database:migrate
更新您的 prod 数据库到最新版本。
提示:生成迁移时,最好为每个 entity/database table 生成一个迁移,就好像某些 sql 查询会在您的大迁移中失败一样,这将是已经被处决的很难回滚
我正在使用 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.
我正在寻找一些可以检查任何数据库更改的代码,并且只有在有更改时才有条件地 运行 迁移任务。
嗯,这是一种奇怪的自动化迁移和数据库版本控制方法。
我们就是这样做的:
每个开发人员都会生成他们的迁移;
- Add/remove 实体中的字段(或创建新实体)
- 运行
$ php app/console doctrine:migrations:diff
迁移是在本地创建的。 - 开发人员然后打开该迁移以确保一切正常,或者添加他们的额外迁移 queries/migrations 等
- 然后他们 commit/push 迁移到存储库,以便所有迁移都由 git 控制版本。
- 其他开发人员提取这些迁移,并在必要时 运行 在他们的本地计算机上进行迁移。
在部署期间,不需要 运行 diff,因为所有的 diff 都在 git 存储库中,所以您只需 运行 database:migrate
更新您的 prod 数据库到最新版本。
提示:生成迁移时,最好为每个 entity/database table 生成一个迁移,就好像某些 sql 查询会在您的大迁移中失败一样,这将是已经被处决的很难回滚