myparcelcom/concurrency-safe-migrations

提供 artisan 命令,运行迁移同时防止同时执行

v0.1.3 2021-03-05 22:49 UTC

This package is auto-updated.

Last update: 2024-09-14 16:34:44 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

概述

这个库提供了 Laravel 的 migrate:safe 命令,它以并发安全的方式使用 Laravel 原子锁执行 migrate artisan 命令。

安装

首先,将 myparcelcom/concurrency-safe-migrations 包包含到您的 composer 依赖中

composer require myparcelcom/concurrency-safe-migrations

简单地将 MigrateSafe 命令注册到您的控制台 Kernel 中

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        \MyParcelCom\ConcurrencySafeMigrations\Commands\Migrate::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // $schedule->command('inspire')->hourly();
    }
}

配置

所有与 migrate 命令相关的选项都可以传递给 migrate:safe。此外,您还可以配置原子锁设置

  • --lock-ttl - 传递自定义最大锁超时时间(以秒为单位)。migrate:safe 将在完成后自动释放锁。然而,在容器死亡且锁未释放的情况下,将一些 ttl 设置为有用的失败案例。默认值是 60 秒
  • --cache-store - 选择特定的缓存存储。省略时,将选择默认的缓存存储。缓存存储是使用原子锁所必需的。
  • --key-id - 输入自定义缓存锁键。省略时,将使用 APP_NAME 和当前应用程序环境来组合键

背景

使用 migrate:safe 运行迁移可以确保您的应用程序不会同时执行迁移。如果您想自动化运行应用程序的迁移,但由于某种原因无法确保 migrate 命令在每次部署中只运行一次,则可能会出现问题。

一个示例应用是使用 Flux 在 Kubernetes 上部署 Laravel 应用程序。Flux 以声明方式协调 Git 中的更改。因此,使用作业在部署时激活迁移变得困难。

migrate:safe 允许开发者将初始化容器附加到部署 Pod,并且只有一个将执行迁移。