myparcelcom / concurrency-safe-migrations
提供 artisan 命令,运行迁移同时防止同时执行
v0.1.3
2021-03-05 22:49 UTC
Requires
- php: >=7.3
- laravel/framework: >=7.0
Requires (Dev)
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-14 16:34:44 UTC
README
概述
这个库提供了 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,并且只有一个将执行迁移。