2019年10月
laravel提交的空字符会转为null导致数据库插入失败(cannot be null)或者数据验校失败问题
场景:手头的项目需要对外提供API服务,需要对请求数据进行签名校验。提交接口的数据会有''空字符值存在,laravel的IlluminateFoundationHttpRequest接收到参数后,会将空字符强制转换为NULL,导致签名校验通不过。
经过一番努力,找到幕后黑手。
Illuminate/Foundation/Http组件中有定义这个中间件。
vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php
<?php
namespace Illuminate\Foundation\Http\Middleware;
class ConvertEmptyStringsToNull extends TransformsRequest
{
/**
* Transform the given value.
*
* @param string $key
* @param mixed $value
* @return mixed
*/
protected function transform($key, $value)
{
return is_string($value) && $value === '' ? null : $value;
}
}
解决方法:
既然是中间件作祟,肯定在内核中有注册。找到内核注释该中间件就好。
app/Http/Kernel.php
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
//\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,//会将''转化为null
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Session\Middleware\StartSession::class,
];
git submodule 使用方法
主项目添加子模块:
git submodule add http://xxxx.gif dir
git submodule init
git submodule update
git commit -am 'add submodule'
git push
Clone带有子模块的项目:
git clone --recursive http://xxx.git [path]
或者
git clone http://xxx.git [path]
git submodule init
git submodule update
在主项目修改子模块:
cd submodule/path
git checkout master
git commit -am 'modify code'
git push origin master
cd main/path
git commit -am 'modify submodule commit id'
git push
其它同事更新最新的子模块代码到他本地项目:
git pull
git status
#这里会拉取主项目更新,并显示子模块有改动,说明子模块与当前的代码不同了
#拉取子模块最新代码
git submoodule foreach git pull
#或者分别进入每个子模块目录,执行git pull,如下
cd submodule/path
git checkout master
git pull
#现在查看主项目状态,应该和其他最新的代码一致了
#cd main/path
git status
要在项目中移除子模块:
#删除git cache和物理文件夹
git rm -r --cached submodule/path/
rm -rf submodule/path/
#删除.gitmodules的这个子模块的内容
#删除.git/config的submodule相关配置
#查看状态,提交更改
git status
git commit -am 'delete submobule'
git push
虚拟机器ssh登陆很慢问题解决办法
vi /etc/ssh/sshd_config
配置文件中的UseDNS设置为yes,修改为no。
然后重启sshd服务即可。
systemctl restart sshd
kubernetes 实现容器集群管理 自动化部署、自动扩缩容、维护
本人总结的一句话:Kubernetes 就是对容器(docker)实现分组和编排管理的集群。(不知道是否正确)
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用
我们的目标是促进完善组件和工具的生态系统,以减轻应用程序在公有云或私有云中运行的负担。
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。
中文文档:
http://docs.kubernetes.org.cn/227.html#Kubernetes
kubernetes1.16.0高可用安装
https://www.kubernetes.org.cn/5904.html
kubelet 服务重启
systemctl restart kubelet
kubernetes WEBUI 的面板
https://github.com/kubernetes/dashboard