2018年6月

首页2018年6月
28
Jun
0

fastdfs安装配置

相关包的下载网址

FastDFS_v5.08.tar.gz

https://sourceforge.net/projects/fastdfs/files/

所有用得上的包下面这个链接都有

https://github.com/happyfish100

安装FastDFS依赖包libfastcommon

wget https://codeload.github.com/happyfish100/libfastcommon/zip/master
unzip master
cd libfastcommon-master/
./make.sh
./make.sh install

安装FastDFS

wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Server%20Source%20Code/FastDFS%20Server%20with%20PHP%20Extension%20Source%20Code%20V5.08/FastDFS_v5.08.tar.gz
tar xf FastDFS_v5.08.tar.gz
cd FastDFS
./make.sh && ./make.sh install

服务脚本位置

ll /etc/init.d/ |grep fdfs

样例配置文件

ll /etc/fdfs/

命令行工具

ll /usr/bin|grep fdfs
  1. 虽然FastDFS区分tracker和storage服务器,但是安装的软件及步骤均相同,只是不同的配置文件而已,因此以上安装适用tracker server和storage server

配置跟踪服务器(tracker server)

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

编辑tracker server配置文件tracker.conf

disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker

编辑client端的配置文件client.conf

base_path=/data/fastdfs/tracker
tracker_server=172.18.10.232:22122

创建tracker server数据目录

mkdir -p /data/fastdfs/tracker

启动tracker server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录

/etc/init.d/fdfs_trackerd start
cd /data/fastdfs/tracker/
ls #自动生成了 data  logs 两个文件夹

编辑storage server配置文件storage.conf

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=172.18.10.232:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)

创建storage server数据目录

mkdir -p /data/fastdfs/storage

试启动storage server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)

/etc/init.d/fdfs_storaged start
cd /data/fastdfs/storage/
ls #自动生成了 data  logs 两个文件夹

文件上传测试

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /download/test.jpg
返回
group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg
success ok!!
26
Jun
0

有一些趋势已经到了挡也挡不住的时候了

昨天 突然翻了翻这几年写的代码

发现现在写python的感觉和刚开始写delphi时很像

代码零乱无章

如果能把python写顺手 估计怎么也得再要一两年的时间

这一年来

有很多事情 发生了改变

以前写delphi vb c#基本开始学时都是一个套路

看书或是baidu代码 慢慢就学会了cs结构 三层结构

本地程序框架 并没有太大的难度

然而现在写python代码

却让人深深的觉得这种套路越来越行不通了

原因是

现在的业务越来越依赖大量的开源组件

而这些组件绝大部分都是国外的

不得不感叹

依赖国内信息就能游刃有余的好写代码已经不太可能了

22
Jun
0

django文件下载,文件名为中文产生浏览器不识别文件名的问题

原因:
各浏览器对文件名的编码引起的

解决方法有如下两种:

  1. 按照http标准组织的方式修改(然而这种方式,并没有成功!)
  2. django.utils.encoding import escape_uri_path

response = HttpResponse(content, content_type='application/octet-stream')
response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(escape_uri_path(file_name))

2.直接按照各浏览器接受的编码进行编码(成功 已测试谷歌浏览器)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename=' + down_name.encode('utf-8').decode('ISO-8859-1')

ps.各浏览器接受的编码列表

IE浏览器,采用URLEncoder编码
Opera浏览器,采用filename*方式
Safari浏览器,采用ISO编码的中文输出
Chrome浏览器,采用Base64编码或ISO编码的中文输出
FireFox浏览器,采用Base64或filename*或ISO编码的中文输出

21
Jun
0

做负载均衡时遇到的多机session不正确(时间同步)

做负载均衡时遇到的多机session不正确

原因:
两个机器时间相差太大,导致session一个过期

处理:
用时间服务器同步 方法如下

同步时间服务器命令

/usr/sbin/ntpdate 10.86.1.76 &> /dev/null
开启定时同步

crontab -e

/5 * /usr/sbin/ntpdate 10.86.1.76 &> /dev/null

21
Jun
0

操作console命令行界面

最简单的直接输出进度条的方式
print("导入进度:{0}%".format(round((row + 1) * 100 / row_count)), end="r")
用字符把数字替换了更好看一点

下面是优雅一点的实现方式

python标准库里边自带一个叫Curses的库,在Unix平台下可以完成对于命令行输出的一些操作,包括指定到某一行输出或者改变输出颜色以及一些更强大的功能。比如像下边这个:pad = curses.newpad(100, 100)

These loops fill the pad with letters; this is

explained in the next section

for y in range(0, 100):

for x in range(0, 100):
    try: pad.addch(y,x, ord('a') + (x*x+y*y) % 26 )
    except curses.error: pass

Displays a section of the pad in the middle of the screen

pad.refresh( 0,0, 5,5, 20,75)
(上述示例代码摘自 Python 官方文档)详细的教程可以看Curses Programming with Python至于Windows下的类似操作,标准库里边没有相应的封装,不过 Python 官方文档里推荐了一个第三方库:Windows Console Driver用起来蛮方便的,比如下边这个例子:import Console

c = Console.getconsole()

c.title("Console Example")

输出到指定位置

c.text(0, 0, "here's some white text on white background", 0x1f)
c.text(10, 5, "line five, column ten")