Submitted by gouki on 2020, May 12, 9:31 AM
在用pm2管理队列的时候。发现queue:work一直启动失败,用pm2 log 看了一下,发现报错:【`AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]】
先确认redis是否有密码:
1、cat /etc/redis/redis.conf中确实 requirepass前的注释没有去掉。
2、运行redis-cli,config get requirepass,发现也确实是空
3、运行redis-cli,输入auth xxx ,返回:(error) ERR Client sent AUTH, but no password is set,证明确实没有密码
然后检查代码:
1、.env 文件中是否设置:未设置
2、config/database.php中是否设置:未设置
那这个问题就怪了,不过还是google了一下,发现好象是 predis 的问题。改成这样就OK了:
PHP代码
- 'default' => [
- 'host' => env('REDIS_HOST', '127.0.0.1'),
- 'port' => env('REDIS_PORT', 6379),
- 'database' => env('REDIS_DATABASE', 0),
- 'password' => env('REDIS_PASSWORD', null),
-
- 'parameters'=>[
- 'password'=>env('REDIS_PASSWORD', null)
- ]
- ],
database.php中关于redis那一块,增加 parameters 的数组下标,问题解决。
PHP | 评论:0
| 阅读:8425
Submitted by gouki on 2020, April 10, 4:10 PM
laravel migratie 创建外键的时候报错:
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `classname` add constraint `classname_classname_id_foreign` foreign key (`classname_id`) references `classnamev2` (`id`))
表名都是测试用的。看了一下,原来是因为classnamev2用了$table->id()来创建主键。所以在创建外键的时候,必须要字段格式完全一致,关联字段必须得unsignedBigInteger()才OK。
默认的主键是无符号大整型,仅仅记录一下。用migrate的时候不能弄混了。
Tags: laravel
PHP | 评论:0
| 阅读:8148
Submitted by gouki on 2020, April 1, 8:15 PM
用过laravel的人都知道 .env 文件是一个非常方便的玩意。比如你配置APP_DEBUG=true,就可以直接用env('APP_DEBUG')来判断。
正常的.env文件就是象这样:
APP_DEBUG=true
APP_NAME=laravel
APP_DESC="如果有特殊符号,需要加双引号,比如#&^%之类的"
在早期的版本中,我用来区分配置块,采用了中括号,如[app],代表下一段的内容都是和APP相关,就象这样
[APP]
APP_DEBUG=true
[DATABASE]
DB_NAME=XXX
然而,刚才部署laravel7的时候,在composer update的过程中就直接报错了:
The environment file is invalid!
Failed to parse dotenv file due to an invalid name. Failed at [[APP]].
咦,这是从什么时候开始不再支持[APP]这样的分块了?为什么喜欢用[]来分块?是因为ini文件中,会将[]当成namespace来处理,早期的 zend 框架也是这样。所以就习惯了。。。。
然后呢?然后,我现在配置文件分块,只能用#来了。。
所以前面的配置文件就变成了;
#app
APP_DEBUG=true
突然一下子觉得好不习惯。。。但,也只能忍忍了
PHP | 评论:0
| 阅读:8173
Submitted by gouki on 2020, February 13, 10:13 PM
七牛云 使用sdk 上传图片提示{"error":"key doesn't match with scope"}
偷懒,我用的是Overtrue的qiniu-filesystem的组件。overtrue大家应该知道,写easywechat的。用了qiniu-filesystem的组件后,生成token就方便了:Storage::disk('qiniu')->getUploadToken();就OK了。
这种是默认情况,啥都OK。配合qiniu-js的upload方法就行。 qiniu.upload(file, filename, uptoken, putExtra, config),也容易解释:file对象,文件名。uploadToken,putExtra是否指定原文件,config:配置,是否用CDN域名等
但如果生成token的时候,指定prefix了。那名qiniu的这个upload方法中的filename就要注意一下。必须是带上prefix的全文件名(基于overtrue的插件)
而且php的方法也要改。如果你直接定义scope为"bucket:prefix",你会发现。。。无效。只能用全名才OK。
记录一下,也算踩了个小坑
PHP | 评论:0
| 阅读:8063
Submitted by gouki on 2020, February 3, 8:05 PM
php 要在字符串前后补位很容易 。str_pad就行了。有PAD_LEFT和PAD_BOTH以及PAD_RIGHT等。但JS就没有这么方便了,虽然在现代浏览器中已经支持padStart这样的用法。
padStart(length , padString)。然而用起来还是要注意:1、只支持String的补位。最好是 val.toString().padStart(10,'0')。2、旧版浏览器不支持。。。比如:微信PC版内置的浏览器就不支持(mac 支持)。
只能临时写个方法。。
String.prototype.padStart = function(length, padString) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
然后就可以用了。
PHP | 评论:0
| 阅读:7472