ZMonster's Blog 巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟

在Heroku上部署Tornado应用

Heroku

heroku.jpg

Heroku 是一个云平台(Platform as a Service, PaaS),提供“无需准备的部署服务”。在Heroku上托管应用,所需的只是对应用本身的开发和管理,应用运行的环境以及安全防护则会由Heroku来进行,此外Heroku上还有非常丰富的Add-ons,即一些扩展服务(有些是免费的有些是收费的),对应用开发和管理非常有用。

免费的Heroku应用只有64MB的内存和512MB的存储,如果想部署大型的应用,最好还是付费的好。不过话说回来,每个账户可以创建的应用好像没有限制。对于个人而言,在Heroku上部署一些小应用,或者个人博客,都是可以一试的——目前已经有不少朋友在上面部署自己的个人博客了。

Tornado

Tornado 是一个Python的Web框架,也是一个python的异步网络库,最初由FriendFeed开发——FriendFeed现已被Facebook收购。

部署Tornado

Heroku 支持Ruby、Python、Java等多种类型的应用,不过Heroku的官方文档上只有对部署Flask的示例,并没有部署Tornado的说明。而实际上,部署Tornado应用和部署其他类型的应用一样,也是很简单的。

要部署Tornado应用到Heroku上,首先需要一个编写正确可用的Tornado应用(关于Heroku的使用将在另一文中细说),在此基础上在应用根目录下准备好以下几个配置文件:

  • requirements.txt

    该配置文件用于指示Python应用的组件依赖,详细文档 在此

    requirements.txt 的内容应该为:

    Tornado==3.1.1     # 假定应用使用3.1.1版本的Tornado,注意这里是"=="而不是"="
    ...                # 其他依赖
    
  • Procfile

    Procfile 用于告诉Heroku处理类型以及要运行的命令,详细文档 在此。 其内容通常为如下形式:

    <process type>: command
    

    假定要部署的Tornado应用的主模块为main.py,则Profile的内容可能为:

    web: python main.py --port=$PORT
    
  • runtime.txt

    runtime.txt 用于指定Python应用使用的Python版本,举例来说,若要部署的Tornado应用要使用2.7.4版本的Python,则runtime.txt的内容应该为:

    python-2.7.4
    

    Heroku支持的Python版本为:

    • python-2.7.4
    • python-3.3.2
    • pypy-1.9 (我也不知道这是什么……)

    如果应用目录下没有runtime.txt,则Heroku默认使用python-2.7.4。