yjiang's cake

Django

初次接触Django,大概使用了下发现跟php还是有一些区别的.
Django不像php的大多数框架,其自身已经整合了包括WebServer 管理后台 用户认证等很多的功能;
虽然有了WebServer,但是Django明确规定manage.py runserver{port}只适合开发使用,发布环境还是需要uwsgi, 依旧是主流的nginx + fastcgi
下面还是简单记录一下整个环境的安装过程

Django

**安装请参照官方文档

uwsgi

1. 安装 aptitude install uwsgi
2. 创建配置 uwsgi.xml

<uwsgi>
        <plugin>python</plugin>
        <socket>/etc/nginx/uwsgi.sock</socket>
        <chmod-socket>777</chmod-socket>
        <pythonpath>/var/www/website</pythonpath>
        <app mountpoint="/">
                <script>website.wsgi</script>
        </app>
        <module>website.wsgi</module>
        <master>true</master>
        <processes>1</processes>
        <enable-threads>true</enable-threads>
        <logdate>true</logdate>
        <harakiri>60</harakiri>
        <reload-mercy>8</reload-mercy>
        <max-requests>200</max-requests>
        <limit-as>512</limit-as>
        <reload-on-as>256</reload-on-as>
        <reload-on-rss>192</reload-on-rss>
        <vacuum/>
        <daemonize>/var/log/uwsgi.log</daemonize>
</uwsgi>

3. nginx调用uwsgi

server{
    listen  80;
    server_name yjiang.wicp.net;
    root /var/www/website/;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/etc/nginx/uwsgi.sock;
        uwsgi_param UWSGI_SCHEME $scheme;
        uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
    }
}

4. 启动uwsgi
uwsgi -x uwsgi.xml

5. 重启nginx
service nginx restart

关闭
pkill -9 uwsgi

curl替代/api测试好工具 -- httpie

又一款python小工具来啦~

特点:相比curl,使用简单,显示结果支持高亮.

httpie-and-curl

安装简单

aptitude install httpie / pip install httpie

几个使用对比

1. curl的GET请求:

curl -v -X GET http://bubbler.labs.douban.com/j/user/68603930

httpie的GET请求

httpid GET http://bubbler.labs.douban.com/j/user/68603930

2. 使用curl进行POST提交JSON时,需要手动书写JSON格式来提交;

curl -v -X POST --data "{'foo':'bar'}" http://yjiang.tk

而使用httpie只需要这样来写

http --form POST http://yjiang.tk foo=bar format=json

3. 使用curl进行文件上传;

curl -v -X POST http://foo.com/upload -F "imageData=@~/1.jpg"

使用httpie则可以这样写

http -f POST http://foo.com/upload imageData=@~/1.jpg

4.更多使用还需要自己http --help

从上面的只言片语看来,虽然只是语法上的些微变化,但实际使用起来httpie的命令确实要比curl更便于记忆.尤其是自定义user-agent``cookie或者使用代理,或https证书验证等更复杂的操作.

文件远程实时同步 (pyinotify + rsync)

需要在机器A与机器B之间实时同步文件,由于实时要求,rsync+crontab的方式就不符合条件了;在google上搜到inotify可以实时检测特定目录下文件的变动,但是需要复杂的配置,看到python的pyinotify库,正好练下python.

安装

pip install pyinotify

realtime_rsync.py

#!/usr/bin/python
#-*-coding:utf8-*-
import os
import subprocess
import pyinotify

sourcePath = '/home/yjiang/foo/'
targetPath = 'yjiang@yjiang.tk:/home/yjiang/bar/'

wm = pyinotify.WatchManager()

class rsync():
    def __init__(self, type, path):
        cmd = 'rsync -avz --delete %s %s' %(sourcePath, targetPath)
        subprocess.call(cmd, shell=True)
        print "%s: %s" % (type, path)

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self, event):
        rsync('create', event.pathname)
    def process_IN_DELETE(self, event):
        rsync('delete', event.pathname)
    def process_IN_MODIFY(self, event):
        rsync('modify', event.pathname)

notifier = pyinotify.Notifier(wm, EventHandler())
wm.add_watch(sourcePath, pyinotify.ALL_EVENTS, rec=True)    #rec=True sub-dir support
notifier.loop()

Copyright © 2016 yjiang's cake

返回顶部