tailnode 的博客

给岁月以文明,而不是给文明以岁月


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

ghost修改代码高亮和字体

发表于 2017-01-13 | 阅读次数

今天开始用ghost,发现默认主题(casper)并没有代码高亮功能,用起来相当不爽。google并看了看ghost主题的代码,找到了解决方法。

在后台找到Code Injection,Blog Header和Blog Footer中分别加入一些代码即可。

修改方法

阅读全文 »

docker容器间通信的一种方法

发表于 2017-01-13 | 阅读次数

以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两个博客。

docker启动命令

ghost:

1
2
docker run -e NODE_ENV=production --name ghost1 -v /path/to/data/ghost/ghost1/:/var/lib/ghost -d ghost
docker run -e NODE_ENV=production --name ghost2 -v /path/to/data/ghost/ghost2/:/var/lib/ghost -d ghost

nginx:

1
docker run -p 80:80 --name nginx --link ghost1 --link ghost2 -v /path/to/data/nginx/nginx.conf:/etc/nginx/nginx.conf -d nginx

先启动两个ghost,然后启动nginx。使用–link参数将容器“链接”到一起,此参数会在容器中加入环境变量并在/etc/hosts中插入一条容器名与IP的映射

1
2
3
4
root@fabfd4bacfda:/# cat /etc/hosts
172.17.0.3 ghost1 d19c0134011a
172.17.0.5 ghost2 0e2e66ba70e0
172.17.0.4 fabfd4bacfda
阅读全文 »

了解kubernetes的ConfigMap

发表于 2017-01-13 | 阅读次数

许多服务在启动/运行时需要读取配置文件、环境变量或命令行参数等信息,我们可以很方便地使用ConfigMap为pod完成这些配置信息的设置与更新。通过下面的例子来了解下ConfigMap吧。

生成ConfigMap

有两个文件info1 info2保存了配置信息

1
2
3
4
5
6
7
8
ming@ming-master:~/temp/configmap$ ls
info1 info2
ming@ming-master:~/temp/configmap$ cat info1
name=mengyuan
corp=tenxcloud
ming@ming-master:~/temp/configmap$ cat info2
name=wanglei
corp=tenxcloud
阅读全文 »

beego orm中时区的问题

发表于 2017-01-13 | 阅读次数

先看简化后代码,下面只列出main函数

1
2
3
4
5
6
7
8
9
10
func main() {
t := "2017-01-19 00:00:00"
o := orm.NewOrm()

qb, _ := orm.NewQueryBuilder("mysql")
sql := qb.Select("COUNT(*)").From("test").Where("create_time > ?").String()
o.Raw(sql, t).Exec()

o.QueryTable("test").Filter("create_time__gt", t).Count()
}

这么看的话感觉两个SQL应该是相同的:

1
2
[ORM] - 2017-01-19 19:28:02 - [Queries/default] - [  OK /     db.Exec /     1.2ms] - [SELECT COUNT(*) FROM test WHERE create_time > ?] - `2017-01-19 00:00:00`
[ORM] - 2017-01-19 19:28:02 - [Queries/default] - [ OK / db.QueryRow / 2.3ms] - [SELECT COUNT(*) FROM `test` T0 WHERE T0.`create_time` > ? ] - `2017-01-19 00:00:00`

我在本机测试OK,但在另一个环境SQL是这样的:

1
2
[ORM] - 2017-01-19 11:30:43 - [Queries/default] - [  OK /     db.Exec /     1.2ms] - [SELECT COUNT(*) FROM test WHERE create_time > ?] - `2017-01-19 00:00:00`
[ORM] - 2017-01-19 11:30:43 - [Queries/default] - [ OK / db.QueryRow / 1.2ms] - [SELECT COUNT(*) FROM `test` T0 WHERE T0.`create_time` > ? ] - `2017-01-19 08:00:00`

相差8小时,第一时间想到时区问题,去有问题的环境一看果真如此。

阅读全文 »

golang在编译时用ldflags设置变量的值

发表于 2017-01-13 | 阅读次数

我们经常会在一些程序的输出中看到程序版本、编译时间、Git的commit id等信息,比如docker

1
2
3
4
5
6
7
8
9
ming@vultr:~$ docker version
Client:
Version: 1.12.5
API version: 1.24
Go version: go1.6.4
Git commit: 7392c3b
Built: Fri Dec 16 02:42:17 2016
OS/Arch: linux/amd64
...

我们可以提供一个配置文件version.conf,程序运行时从version.conf取得这些信息进行显示。但是在部署程序时,除了二进制文件还需要额外的配置文件,不是很方便。
或者将这些信息写入代码中,这样不需要额外的version.conf,但要在每次编译时修改代码文件,也够麻烦的了。
有一种更好的办法是在编译时使用参数-ldflags -X importpath.name=value,官方解释如下

-X importpath.name=value
Set the value of the string variable in importpath named name to value.
Note that before Go 1.5 this option took two separate arguments.
Now it takes one argument split on the first = sign.

阅读全文 »

常用命令

发表于 2017-01-13 | 阅读次数

shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
scp复制多个文件,并且不需要输入yes
scp -o "StrictHostKeyChecking no" 20150603.tar.gz 20150627.tar.gz 20150705.tar.gz user@host:/home/users/log/20150715/`hostname`

for i in `seq -f %02g 0 23`;do file="log/pay.log.20150731"$i; echo $file;done

查看svn密码~/.subversion/auth/svn.simple/48eed6299865c0af1dac26d1a6d79efa

mutt发邮件mutt -e "my_hdr content-type:text/html" -s "subject" "user@baidu.com" < mail.html

列出文件中排名前10的行及数量 sort file | uniq -c | sort -k 1 -n -r | head -10

格式化json输出`cat /tmp/json |python -m json.tool`

输出文件指定行cat filename| head -n 3000 | tail -n +1000(显示1000行到3000行),cat filename | tail -n +3000 | head -n 1000(从第3000行开始,显示1000行。即显示3000~3999行)
阅读全文 »

golang闭包

发表于 2017-01-13 | 阅读次数

有如下函数,简单来说就是有错误则直接返回,没错误则执行f函数。

1
2
3
4
5
6
7
func (t *transaction) Do(f func()) *transaction {
if t.fail || t.rollback || t.finish {
return t
}
f()
return t
}

函数很简单,但如何测试呢,简单但丑陋的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
func Test_func(t *testing.T) {
isCalled := false
f := func() {
isCalled = true
}
trans := New()
// do something
trans.Do(f)
// check
if isCalled {
// do something
}
}
阅读全文 »

Go的内存模型

发表于 2017-01-13 | 阅读次数

说明

翻译自The Go Memory Model

介绍

如何保证在一个goroutine中看到在另一个goroutine修改的变量的值,这篇文章进行了详细说明。

建议

如果程序中修改数据时有其他goroutine同时读取,那么必须将读取串行化。为了串行化访问,请使用channel或其他同步原语,例如sync和sync/atomic来保护数据。

阅读全文 »

了解etcd

发表于 2017-01-13 | 阅读次数

说明

这是一篇非常入门的文章,让你大概了解一下etcd。写这篇文章时使用etcd的版本是3.1.0。
etcd是以实现共享配置和服务发现为目的,提供一致性的键值存储的分布式数据库。kubernetes等项目使用了etcd。

下载安装

去这里下载release包,解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端。将etcd和etcdctl加入PATH路径方便我们执行命令。

运行server

执行命令etcd,即可启动server

1
2
3
4
5
6
7
8
9
10
11
ming@ming:/tmp$ etcd
2017-02-14 14:04:40.164639 I | etcdmain: etcd Version: 3.1.0
2017-02-14 14:04:40.164725 I | etcdmain: Git SHA: 8ba2897
2017-02-14 14:04:40.164736 I | etcdmain: Go Version: go1.7.4
2017-02-14 14:04:40.164776 I | etcdmain: Go OS/Arch: linux/amd64
2017-02-14 14:04:40.164784 I | etcdmain: setting maximum number of CPUs to 4, total number of available CPUs is 4
2017-02-14 14:04:40.164850 W | etcdmain: no data-dir provided, using default data-dir ./default.etcd
2017-02-14 14:04:40.164934 I | etcdmain: advertising using detected default host "192.168.1.124"
2017-02-14 14:04:40.165855 I | embed: listening for peers on http://localhost:2380
2017-02-14 14:04:40.167090 I | embed: listening for client requests on localhost:2379
......

etcdctl

说明:etcd最新的API版本是v3。与v2相比,v3更高效更清晰。设置环境变量ETCDCTL_API=3。

1
2
3
4
ming@ming:/tmp$ export ETCDCTL_API=3
ming@ming:/tmp$ etcdctl version
etcdctl version: 3.1.0
API version: 3.1

键值对命令

put设置key,get取得key

1
2
3
4
5
ming@ming:/tmp$ etcdctl put msg "Hello TenxCloud"
OK
ming@ming:/tmp$ etcdctl get msg
msg
Hello TenxCloud

del删除key

1
2
3
4
5
6
7
ming@ming:/tmp$ etcdctl get msg  
msg
Hello TenxCloud
ming@ming:/tmp$ etcdctl del msg
1
ming@ming:/tmp$ etcdctl get msg
ming@ming:/tmp$
阅读全文 »
1…34
tailnode

tailnode

39 日志
10 标签
GitHub Email
© 2019 tailnode
由 Hexo 强力驱动
主题 - NexT.Pisces