小程序JS Date.parse返回null

前端同事在做微信小程序时发现IOS获取的时间戳为空的问题,后来通过跟踪发现,原来是因为IOS系统不支持2018-08-08格式的时间导致的,

var mydata = ‘2018-08-08 11:00:00’;
console.log(“返回时间:” + mydata);
var time = Date.parse(new Date(mydata)) / 1000;

这样的代码安卓手机开发手机测试都没有问题,唯独IOS获取的日期为null,若干次百度调试后发现,原来IOS只识别2018/08/08这样的日期格式,
下面用正则替换2018-08-08日期格式为2018/08/08后问题解决(代码如下)

var mydata = ‘2018-08-08 11:00:00’;
mydata=data.replace(/-/g, ‘/’);
console.log(“返回时间:” + mydata);
var time = Date.parse(new Date(mydata)) / 1000;

转自:https://blog.csdn.net/zqtsx/article/details/74331076

基于动态发现的ETCD集群的节点迁移

基于docker-compose编排了一组etcd集群,如果想把其中一个节点替换掉应该怎么操作呢,网上有一些质量非常高的技术文章,但是有一些细节地方没有说清楚。

先把我的docker-compose.yml帖上来。

version: '3'
services:
  etcd1:
    image: "quay.io/coreos/etcd:latest"
    network_mode: "host"
    volumes:
      - /data0/etcd/etcd1/:/etcd_data/:rw
    command:
      - etcd
      - --name
      - etcd1
      - --data-dir
      - /etcd_data
      - --listen-peer-urls
      - http://${DOCKER_IIP}:2380
      - --listen-client-urls
      - http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
      - --advertise-client-urls
      - http://${DOCKER_IIP}:2379
      - --initial-advertise-peer-urls
      - http://${DOCKER_IIP}:2380
      - --discovery
      - http://discovery.etcd.io/TTTTTTTTTTTTTTTTTTTTTTT

下面来进行替换节点的操作,先查看一下节点列表

/ # etcdctl member list
1ca4fc0d4b2c9fa2: name=etcd1 peerURLs=http://192.168.56.42:2380 clientURLs=http://192.168.56.42:2379 isLeader=true
4cf04322e0117c69: name=etcd4 peerURLs=http://192.168.56.33:2380 clientURLs=http://192.168.56.33:2379 isLeader=false
6dc5120e6c9ba574: name=etcd3 peerURLs=http://192.168.56.42:2382 clientURLs=http://192.168.56.42:2381 isLeader=false

先拿掉etcd4。

/ # etcdctl member remove 4cf04322e0117c69
Removed member 4cf04322e0117c69 from cluster

再进行添加操作。

/ # etcdctl member add etcd2 http://192.168.56.33:2380
Added member named etcd2 with ID d401a8b3607279fc to cluster

ETCD_NAME="etcd2"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.56.42:2380,etcd3=http://192.168.56.42:2382,etcd2=http://192.168.56.33:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

接下来是重点了,把这几个环境变量记录一下,修改一下原来的docker-compose.yml,进行新节点启动。

version: '3'
services:
  etcd2:
    image: "quay.io/coreos/etcd:latest"
    network_mode: "host"
    volumes:
      - /data0/etcd/etcd2/:/etcd_data/:rw
    command:
      - etcd
      - --name
      - etcd2
      - --data-dir
      - /etcd_data
      - --listen-peer-urls
      - http://${DOCKER_IIP}:2380
      - --listen-client-urls
      - http://${DOCKER_IIP}:2379,http://127.0.0.1:2379
      - --advertise-client-urls
      - http://${DOCKER_IIP}:2379
      - --initial-advertise-peer-urls
      - http://${DOCKER_IIP}:2380
      #- --discovery
      #- http://discovery.etcd.io/df65ece6e8eef0db7548c7a51adb894e
      - --initial-cluster-state
      - existing
      - --initial-cluster
      - etcd1=http://192.168.56.42:2380,etcd2=http://192.168.56.33:2380,etcd3=http://192.168.56.42:2382

将原来的–discovery临时注释,添加下面几行,然后进行节点启动,节点启动成功之后,把上面这一次临时修改还原就可以。

nginx开发参数调整

无论是看过的nginx有关书还是网上看到的有关nginx 配置说明的文章(http://wiki.nginx.org/EventsModule#worker_connections),无一例外,在讲到 worker_connections 和 max_clients这两个概念的关系时都一致的一笔带过,尤其是在讲到nginx作为反向代理时max_clients的计算时,都是想当然的贴出max_clients = worker_processes * worker_connections/4这个理论计算公式来。既然是理论公式,那么为什么要除以4呢?肯定是有原因的吧。我相信有些人是知道如何计算的,但是很多人都如我一样一眼扫过,真正等到别人或者自己问自己的时候就真的感觉是云里雾里,不知所以然了。
继续阅读nginx开发参数调整

Mysql5.7 设置utf8mb4字符

参数说明。
character-set-client-handshake
用来控制客户端声明使用字符集和服务端声明使用的字符集在不一致的情况下的兼容性,默认为 true。

character-set-client-handshake = false

# 设置为 False, 在客户端字符集和服务端字符集不同的时候将拒绝连接到服务端执行任何操作

character-set-client-handshake = true

# 设置为 True, 即使客户端字符集和服务端字符集不同, 也允许客户端连接

character-set-server
声明服务端的字符编码, 推荐使用utf8mb4 , 该字符虽然占用空间会比较大, 但是可以兼容 emoji 😈 表情的存储
继续阅读Mysql5.7 设置utf8mb4字符

使用docker镜像一行命令签发/续期免费ssl

letsencrypt 免费的ssl证书现在已经比较流行了,今天来使用docker环境一行命令签发/续期证书。
他自己的有多种方式验证服务器的合法性,也就是证明这台服务器是你的,你拥有他的操作权限。今天使用webroot的方式来验证,这个方式有一个好处就是不影响现有的服务器运行。
他的机制其实就是命令录入一个webroot,自动验证程序会在这个目录写入一个临时的文件,然后这个程序会从互联网外网通过你键入的域名来访问这个文件,比如[http://gbk.pw/.well-known/acme-challenge/BY91IegFTEq8MtM8nAGEwOvY2TSos_tM7E2fAOeGgF0:]。如果通过域名能访问到,也就代表着你有这台服务器有写入权限。当然这只是他的原理,使用起来可以不必关心这些。

继续阅读使用docker镜像一行命令签发/续期免费ssl