求助:Laravel 项目计划每晚 10 点切户数据库配置,有方案吗?

因为库1需要每晚10点维护,现在想每晚10点-12点从库2读取数据。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 17
leo

config/database.php 配置文件是可以写 PHP 代码的呀

5年前 评论
liuqing_hu

准备两套配置文件。

A 使用库 1 的配置 如:database_db1.php
B 使用库 2 的配置 如:database_db2.php

再写两个计划任务 crontab
晚上 10 点 crontab 处理:

mv database.php
cp database_db2.php database.php

晚上 12 点 crontab 处理 :

mv database.php
cp database_db1.php database.php

搞定

===
更新,你也可以结合 Laravel 任务调度,不过这样感觉貌似让事情变得复杂了许多。

5年前 评论
leo

@liuqing_hu 你这个太复杂了,仔细想想:config/database.php 是可编程的

5年前 评论
liuqing_hu

@leo 如果觉得每天 10 点手动编辑配置文件,然后维护完成后在修改回来不觉得麻烦,也可以。

麻烦的话写计划任务自动去执行,运维只需要关注数据库维护就好了。

5年前 评论
leo

@liuqing_hu 你没理解我的意思,直接在 config/database.php 中判断时间修改 default 值即可

5年前 评论

@liuqing_hu 不对呀,这个laravel的数据库配置要是生产环境,应该是.env配置文件吧

5年前 评论
liuqing_hu

@wojianduanfa 理解了就好的

5年前 评论
TimJuly

@leo
一旦配置被缓存,config/database.php编写的动态内容也就不生效了。这个大坑一定要注意,否则等着加班到天亮吧。

5年前 评论
leo

@TimJuly 那是自然,用其他的方案也有一样的问题

5年前 评论
liuqing_hu

@leo 依据时间修改值也是可以的,最终的目的都是需要到某个时间点去把需要维护的数据库下线。不过如果启用了 laravel 配置缓存的话,我们还需要去重新生成缓存。所以把这部分工作交给 shell 脚本和 crontab 去做一劳永逸。

只是提供一种解决方案探讨一下。

5年前 评论

@leo 要是配置文件是.env你的方法就不行了哦

5年前 评论

@TimJuly 那就是那个计划任务里除了复制替换数据库配置还要清除数据库缓存配置,就可以了吧

5年前 评论
leo

@wojianduanfa 当然可以,返回不同的 default 值即可,如果还没明白说明你对 PHP / Laravel 了解还不够深

5年前 评论
TimJuly

@leo
走数据库中间件就没有这个问题。

@wojianduanfa
对,要处理好配置文件的缓存。更新了缓存队列也需要重启。暂时想到这两个地方,其余的可能还有。

5年前 评论

不知道能不能通过代理实现,通过crontab定时改变代理的IP,类似于hosts

5年前 评论

@TimJuly 可以再写个定时任务执行 config:cache 命令

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!