All Posts

Migrate from Jekyll to Hugo

Today I spent around one hour to switch my blog from Jekyll to Hugo. The reason is pretty simple. I’ve always wanted to enter the golang world, so Hugo would be a great place to start Disqus and staticman just did not work with Jekyll Jekyll has been there so long enough and now it’s time try something new (and faster) The swtich is surprisingly easy and straight-forward.

Creating your personal static blog with jekyll

By the end of this tutorial, you will have your own personal blog :tada: Created by static site generator Hosted for free on netlify Custom domain like yourdomain.com Secured by HTTPS by Let’s Encrypt Tools used in this tutorial jekyll rbenv (for managing ruby environment) a text editor (Sublime Text or vscode) (optional) a domain of your own, purchased separately from sites like GoDaddy Environment setup Since the static site generator used here jekyll is written in Ruby, we will need install a Ruby development.

管理多Python环境之Virtualenv与Virtualenvwrapper

在《Django 最佳实践与部署》一文中我曾提到过用 virtualenv 创建虚拟环境的好处。今天将结合 virtualenvwrapper—virtualenv 的终极伴侣,来具体谈一谈如何利用虚拟环境提高开发效率。 为什么要使用 virtualenv 和 virtualenvwrapper 作为一个完美主义者,不喜欢看到系统site-packages放着各种各样 Python 包。很多包只是因为某个项目需要,而根本没有必要放在全局。我喜欢 virtualenv 这种相互独立环境的概念,就好像有很多房间,每个房间可以有不同装饰,拥有自己个性。 virtualenv 安装 $ pip install virtualenv 创建环境 $ virtualenv ENV # 创建名为‘ENV‘的虚拟环境 $ New python executable in ENV/bin/python $ Installing setuptools, pip...done. 这样就成功创建好一个 python 的虚拟环境,实际上他为你建立了三个目录: bin include lib 这里面包含一个 Python 环境(默认为系统 Python 的版本),一些基本工具(如 easy_install 和 pip)以及一些 symbolic link。而以后的 package 都会装到lib/pythonX.X/site-packages里面。 激活环境 使用虚拟环境之前必须激活,不然 package 还是会装到系统的site-packages里面。 $ source bin/activate 激活成功后,prompt 左边会出现一个括号,里面对应就虚拟环境的名字。这个时候就代表激活成功了,而此时用 pip 安装任何包都会装到虚拟环境的site-packages,对其他项目和系统 Python 环境都完全不影响。

如何使用Sublime Text编辑远程文件

对于我这个Vim使用起来还不太顺手的人来说,能用Sublime Text来编辑远程服务器上的文件简直就是福音。 很惊奇还有很多小伙伴不知道这个技巧。今天来分享一下: 用Sublime Text的Package Control安装一个叫rsub的插件 修改本地的ssh config(如果没有就创建这个文件) $ vim ~/.ssh/config 加入下面两行 Host your_remote_server.com # 这里填服务器的IP地址 RemoteForward 52698 127.0.0.1:52698 SSH到服务器 $ sudo wget -O /usr/local/bin/rsub https://raw.github.com/aurora/rmate/master/rmate $ sudo chmod +x /usr/local/bin/rsub 大功告成。试试编辑任何文件,是不是在Sublime Text打开了? $ rsub ~/webapps/myproject/some_file 如果有权限问题导致不能编辑可以加sudo或者-f 注:Textmate也用这个功能,命令是rmate,其实准确说rsub是从rmatefork来的 参考文章 Sublime Tunnel of Love: How to Edit Remote Files With Sublime Text via an SSH Tunnel

Django最佳实践与部署:Nginx + Gunicorn + Supervisor(Ubuntu和CentOS)

题头 头图是我一个Django项目–Santa的代码片段,放出来给大家欣赏一下。 第一篇很技术的文章。Mrxu同学强烈要求我出个教程,基于Django的部署实在有太多坑,为后人铺条路。以下文字是我摸爬滚打无数小时换来的一个可行方案。希望对大家有所帮助。 Django最佳实践 项目结构 相信很多朋友在使用Django的时候都会遇到这个问题,项目到底如何组织?只有一个app的时候不要紧,有两个、三个甚至多个app的时候,模板(templates)要放在那里,静态文件(static files)放在哪里?由于Django社区(不像Rails)一直没有统一说法,所以此处说的只不过是仁者见仁,智者见智。希望Django早日出台官方的最佳实践。这里仅给大家一个参考。 下面我用一个myproject项目为大家阐述。这个项目由两个app组成: 每个app有自己的static目录 每个app有自己的templates目录 根目录下与项目同名的文件夹(比如这里的myproject)为项目设置,包含settings.py 根目录下有requirements.txt 为什么要这么做?这个在后面生产境部署的时候优势就会显现出来。 $ django-admin.py startproject myproject $ cd myproject $ python manage.py startapp myapp1 $ python manage.py startapp myapp2 $ touch requirements.txt # 新建requirement.txt $ mkdir myapp1/{static,templates} # 新建两个空文件夹 $ mkdir myapp2/{static,templates} $ tree . # 非常有用的一个命令, 图形化显示文件目录结构 . ├── manage.py ├── myapp1 │ ├── __init__.py │ ├── admin.py │ ├── models.py │ ├── static │ ├── templates │ ├── tests.