一、laravel的session存储流程及容易遇到的坑
1、背景
$data = $request->session()->get('key2');
dump($data);
$request->session()->put('key2', time());
dd($request->session()->get('key2'));
执行以上代码你会发现,无论如何刷新效果如下
2、推测:session肯定已启动,不然就是以下报错,经排查发现在全局中间件$middleware也是加载了\Illuminate\Session\Middleware\StartSession::class,也就是session肯定启动了,那就是session存储过程出了问题,
经排查发现session文件并未生成。
3、原因:原来是laravel对session存储流程的一个优化点,laravel为了防止在一次调用controller中session被多次加载,故在laravel中不是每次put都启动一次session,把当前值写入session文件的,这样读写操作会导致IO操作过于频繁,影响性能,laravel框架会在发送响应信息之前保存session。如果在中途出现了dd();die();exit();等提前中止会话的操作,session将无法自动写进文件。
3、解决方案
(1)把dd();die();exit();等换成return操作。
(2)放弃自动保存,进行手动保存,在laravel中提供了一个save函数,可进行手动保存操作
二、git版本管理 .gitignore不起作用的解决办法
1、出现的问题
从服务器克隆下来的项目,在本地修复运行产生了部分缓存文件后,确认可以提交到远程分支了,提交时发现居然把缓存文件也列入了提交的范围了,去.gitignore文件查看,发现缓存文件的目录已经被列入忽略队列,这就说明忽略文件并未生效。
2、问题的原因
经过对git版本控制的重新认识,发现那些没有生效的目录是因为这些目录或者文件已经被staged,也就是这些文件或者目录已经被列入版本控制管理了,则导致.gitinore文件无效
3、解决的方案
(1)首先去到服务器仓库端,执行
git rm -r --cached .
清理远程仓库的暂存区
(2)然后再本地执行
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
清理本地的暂存区,然后提交
三、ucloud重装系统磁盘问题
1、背景
在购买服务器后,由于卸载web环境不干净,而服务器是空的服务器,我选择了重装系统来快速重置环境,但是我发现重装系统后,我购买的40G系统硬盘变成了20G,而20G数据盘并没有挂载上去
2、原因
经和ucloud进行了工单反馈,说ucloud方面重装后会默认重置硬盘到他们的初始状态,也就是20+系统盘,如果需要恢复到购买状态需要自己手动扩容
3、解决
(1)首先对系统盘进行分区,
选择n,对未挂载出来的空间进行分区
第一步,询问建立分区的号是什么,第二步分区的空间是多大,这里我们选择是没有被挂载上去的空间
最后输入w保存即可
(2)格式化新建的分区:主流的文件系统有ext4和xfsd,我建立了ext4文件系统,mkfs.ext4 /dev/vdb1
(3)然后才到ucloud给到的工单流程
这就完成了ucloud重装后扩容的流程。数据盘需要到ucloud平台去挂载后,再进行以上步骤。