elao / command-migration
PHP库用于运行命令,例如在部署时。
Requires
- php: >=7.2.0
- doctrine/dbal: ^2.6.0
- symfony/console: ~3.4|~4.1
- symfony/event-dispatcher: ~3.4|~4.1
- symfony/process: ~3.4|~4.1
- symfony/yaml: ~3.4|~4.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpunit/phpunit: ^7.0
README
PHP库用于运行命令,例如在部署时。
为什么
有时,在部署或切换分支时,我们需要运行一些迁移命令,例如重新索引数据库、计算聚合、删除上传的文件等...
不要再手动通过SSH连接到服务器来操作了!这个库允许你在feature git分支中声明需要运行的命令。
安装
$ composer require elao/command-migration
在Symfony <= 3.4 (app/AppKernel.php)上启用包
public function registerBundles()
{
$bundles = array(
// ...
new Elao\CommandMigration\Bridge\Symfony\Bundle\CommandMigrationBundle(),
// ...
);
}
在Symfony 4 (config/bundles.php)上启用包
return [
// ...
Elao\CommandMigration\Bridge\Symfony\Bundle\CommandMigrationBundle::class => ['all' => true],
// ...
];
添加一个elao_command_migration.yaml
文件(当然是在非公开目录中!)
elao_command_migration: storage: type: dbal dsn: '%env(DATABASE_DSN)%' table_name: 'command_migrations' migrations: []
使用方法
在你的elao_command_migration.yaml
文件中的migrations
条目中声明需要运行的命令
elao_command_migration: # ... migrations: whateverUniqueIdentifier: - php bin/console app:posts:reindex 20180510173033: - php bin/console app:posts:reindex - php bin/console doctrine:migrations:migrate 20180622110900: - php bin/console app:posts:reindex - node hello-world.js - php bin/console doctrine:schema:update --force - rm -rf public/uploads/lolcats - php bin/console app:recalculate:turnover
migrations
中的条目可以使用任何标识符,但我们建议使用日期+时间格式:YYYYMMDDHHMMSS
运行php bin/elao-command-migration path/to/elao_command_migration.yaml
来测试。
集成
将php bin/elao-command-migration path/to/elao_command_migration.yaml
添加到你的部署流程中。
Capifony
在deploy.rb中设置
after :deploy, 'app_tasks:elao_command_migration' namespace :app_tasks do task :elao_command_migration do capifony_pretty_print "--> Run command migrations" invoke_command "php bin/elao-command-migration path/to/elao_command_migration.yaml", :via => run_method capifony_puts_ok end end
Ansible
使用Manala/ansible-role-deploy,添加到ansible/group_vars/deploy.yml
manala_deploy_tasks: - command: php bin/elao-command-migration path/to/elao_command_migration.yaml
或者
manala_deploy_post_tasks: - command: php bin/elao-command-migration path/to/elao_command_migration.yaml
工作原理
CommandMigration非常受Doctrine Migrations的启发,但用于运行命令。
elao:command-migration:run
命令
- 从
command_migrations
数据库表获取所有已运行的迁移 - 从
elao_command_migration.migrations
获取未运行的迁移 - 将迁移标识符存储在
command_migrations
数据库表中。
清理旧迁移
当命令已在生产环境中部署并运行后,你可以(手动)删除elao_command_migration.migrations
中的条目。