Laravel5.5队列踩坑日记
环境
laravel5.5 使用database实现队列发送邮件
进程
php artisan queue:listen --tries=3 --timeout=900 >> /var/log/artisan.log &
问题
当修改env文件的mail的配置项密码的时候,执行了以下的命令
php artisan config:clear
php artisan cache:clear
邮件队列的邮件没有发送出去,报了邮件密码认证错误,查了一下需要把config:cache起来
php artisan config:cache
邮件确实发送出去了,但是有个小问题,我在filesystem里面使用了一个变量(date(‘Ymd’))
我发现他在上传使用
使用tinker查看了此变量发现没有使用今天的日期,却使用了当时的config:cache的日期
要实现这样的效果,就不能使用
php artisan config:cache
后来我发现我重启队列的进程就可以了,laravel5.5的cache还是要去看下底层的逻辑代码
本作品采用《CC 协议》,转载必须注明作者和本文链接
filesystem 这里使用变量当然不太对啊! 你 php artisan config:cache 的时候, 配置项已经缓存起来了, 后续调用的时候当然是直接从缓存里面取,而不是根据时间实时计算。
你这里缓存配置项是因为你的邮件密码需要从缓存里面取,你缓存了之后 filesystem 配置项自然也被缓存起来了,你又希望每次调用的时候不从缓存里面取。 你要么不 php artisan config:cache 都不缓存,要么 php artisan config:cache 然后都用缓存。感觉你这一块真的很矛盾,甚至我怀疑你自己都不知道自己在干什么。
最后 disk 明显是磁盘的意思, 一般我都是用来区分不同的文件系统,比如 oss minio local 这样,你这个区分文件夹感觉不应该在 disk 这里区分。
artisan config:cache
就会生产bootstrap/cache/config.php
,以后配置只读这个文件。你原本配置是:
root => date("Ymd")
就会变成:root => "2030-8-10"
也就是动态变静态字符串。
其次: 不用
config cache
就行了,额 这已经是破坏框架了吧。在队列里面就算你不用 config:cache 你现在这样写是有问题的
因为队列只会在启动的时候去加载配置 你在配置里面用动态参数是不合理的
。。。。。。。
这个
root
只定义根目录,日期在每次写文件的时候传递给path