elao/command-migration

PHP库用于运行命令,例如在部署时。

v0.2.3 2019-01-15 13:21 UTC

This package is auto-updated.

Last update: 2024-09-16 03:01:06 UTC


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中的条目。

谁在使用它?