2019年10月

场景:手头的项目需要对外提供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,
    ];

转载于:https://blog.51cto.com/phpme/2373853

主项目添加子模块:

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

本人总结的一句话: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