手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:PHP

laravel predis `AUTH` failed: ERR Client sent AUTH

之前写过一篇:laravel 队列报错:`AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379] ,就在前两天,今天上线看的时候,发现pm2 status的时候显示failed。

于是就在看到底是怎么回事,按理这个参数应该没问题啊?经过不停的测试不停的测试,发现

1、将paramaters放在default和cache中,仍然报错

2、将paramaters放在options里,一样报错

3、将default/cache中的password删除,只除paramaters,报错

4、将default/cache中的password删除,删除paramaters,留options中的paramaters,报错

5、将所有涉及到密码的地方删除,成功

--------再看predis的github发现他已经几年不更新了。所以,我也只能忍喽?不然怎么办?如果有设置密码,就将这个key加回来【因为之前测试过,如果确实有密码,并且设置了,没问题】

再看,pm2 stauts,还是报错,那问题就来了。因为我直接php artisan queue:work --tries=5 --sleep=1没有错,但为什么pm2启动就报错呢?于是查看进程,ps uax|grep artisan,发现运行路径是在release/4目录下。而不是current目录【之所以目录结构 是这样,是缘于我采用deployer进行项目部署的】

即使我在current目录下执行pm2 start xxx.yml,也是默认在release/4路径,毕竟它是映射过来的

所以最终我只能修改yml文件,将artisan路径设置为绝对路径。强行指定为current所在的绝对路径。这样就没有问题了。

至此,Auth没有设置密码的问题解决。同时还解决了artisan 执行queue:work 路径不对的问题(如果不解决这个,这意味着无论我怎么执行,都不在正确的目录下了)

Tags: laravel, predis, auth

deployer 快速部署

 deployer是一个PHP版的部署工具,支持各类框架以及裸PHP的部署(支持的框架,其实也只是帮你预置了一些代码,方便你调用而已)

但deployer在部署的时候,其实都是从头开始执行了一遍流程,如果只是简单的改了一些小BUG,不影响整体的,这样的话,就性能太低了。或者说不是叫性能太低,是太耗时间了。毕竟composer帮你执行一遍。好歹也得有个1~2分钟了吧。git 拉一下全库,又得1~2分钟这得多痛苦。

所以简单写了一个task,如果更新不涉及composer/migration,就这样执行一下下喽

PHP代码
  1. desc("只更新代码");  
  2. task("pull",function(){  
  3.     writeln(run("cd {{current_path}} && git pull"));  
  4. });  
  5.   
  6. desc("更新代码,并清除一些缓存");  
  7. task("update",[  
  8.     'pull',  
  9.     'artisan:cache:clear',  
  10.     'artisan:config:cache',  
  11.     'artisan:route:cache',  
  12.     'artisan:optimize',  
  13.     'artisan:queue:restart'  
  14. ]);  

这种就是属于临时性的。全量还是得靠 dep deploy。

想想的话,这样好象也暂够用了。如果将dep再配置一个后台,也可以完成很多事情。算了,不折腾

 

 

Tags: deployer

laravel 队列报错:`AUTH` failed: ERR Client sent AUTH, but no password is set [tcp://127.0.0.1:6379]

在用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代码
  1. 'default' => [  
  2.     'host'     => env('REDIS_HOST''127.0.0.1'),  
  3.     'port'     => env('REDIS_PORT', 6379),  
  4.     'database' => env('REDIS_DATABASE', 0),  
  5.     'password' => env('REDIS_PASSWORD', null),  
  6.     //以下为新增  
  7.     'parameters'=>[  
  8.         'password'=>env('REDIS_PASSWORD', null)  
  9.     ]  
  10. ],  
database.php中关于redis那一块,增加 parameters 的数组下标,问题解决。
 
 

laravel migratie 创建外键

 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

坑:vlucas/phpdotenv 不再解析 []

 用过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

突然一下子觉得好不习惯。。。但,也只能忍忍了

Records:64312345678910»