【问题标题】:Disable/Refuse 'migrate:refresh' when the staging database is connected连接登台数据库时禁用/拒绝“迁移:刷新”
【发布时间】:2021-10-15 14:58:20
【问题描述】:

在处理 Laravel 项目时,我经常在本地 MySQL 数据库(具有最少的种子数据)和外部 staging 数据库(填充有代表性的、类似生产的数据)之间切换。我通过在.env 文件中注释掉连接详细信息来切换。

对于我的本地数据库,我经常运行php artisan migrate:refresh --seed 来测试新的模型和关系。但是我从不想在暂存数据库上运行这个命令(偶然地,当我忘记切换到我的本地数据库时)。

我可以实现migrate 命令的预执行 功能(或类似功能),以首先检查我的DB_HOST 是否具有某些价值,如果检测到则停止执行暂存环境选择好了吗?

注意:在暂存数据库上禁用我的用户的写入权限不是一个选项,因为我在该数据库上测试插入/删除。

【问题讨论】:

标签: php laravel laravel-artisan


【解决方案1】:

Laravel 已经根据使用的环境对 migrate Artisan 命令进行了健全性检查。

如果您将APP_ENV 设置为production,那么当您尝试运行不带migrate 标志的migrate 命令时,它会抛出警告,并会通知您应用程序正在生产中并询问以确认您希望运行此命令。

在您的情况下,我也会避免使用您在本地使用的“虚拟”数据,因为它不能代表生产数据。我会获取暂存数据库的副本并在本地使用它,因为它更能代表您在生产中实际使用的内容,并且通过消除使用单独数据库的需要来回避您遇到的问题。事实上,您使用的方法本身就是有风险的。

【讨论】:

  • 谢谢。我会接受这个答案,因为它是 Laravel 本身的限制。但是,在切换到临时数据库时切换到 APP_ENV = production 并不理想,因为您丢失了专门为开发目的构建的逻辑。
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2017-06-27
  • 2017-11-03
相关资源
最近更新 更多