Source

timstudy-201110-memocurial-introduction / index.rst

Full commit

Gist クローン作りました


内容

  • 自己紹介
  • 経緯
  • アプリ紹介
  • デモ
  • PythonのWebアプリの足回り
  • 参考文献

自己紹介

  • 飯野卓見 (@troter)
    • 株式会社タイムインターメディア所属
  • Ruby, PHP, Python(?), Java, Emacs, etc

はじめに

  • TIM社内勉強会用資料です。
  • 小ネタ

経緯


ある日のIRC


省略


ある日のIRC その2


省略


Gist


Gist とは

  • http://gist.github.com/
  • コードスニペット共有サービス
    • テキストファイルをバージョン管理
    • 1ファイルに特化したUI
    • ブログへの埋め込みも可能

使い道

  • 簡単な設定の共有
  • ちょっとしたスクリプトの共有
  • (エラー)ログ貼り付け
  • ソースコード晒し上げ

Gistをそのまま使うのはなぜだめか

  • 公開されてしまう
    • 社内の情報
    • お客さんの情報
    • ソースコード
  • 仕事で情報共有するのに使うのは難しい

社内Gistの必要性


数ヶ月後


社内Gist出来たよー


Gist Clone Memocurial


Memocurial

  • https://bitbucket.org/troter/memocurial
  • Memo + Mercurial = Memocurial
  • Flask(Micro Framework)製
  • Mercurialでバージョン管理
  • 簡単なシンタックスハイライト
  • Markdown、reStructuredText のマークアップ
  • 調子に乗って作ったGyazo機能

デモ


Memocurial 今後の野望

  • Gist 互換 API
  • シンタックスハイライト強化(Shpinxが利用しているライブラリに乗り換え)
  • Heroku対応
  • ドキュメントの充実(サポート言語)
  • ユーザと権限
  • PyPI(the Python Package Index)にアップ

Memocurial 現実

  • 現実
    • トランザクションが無い
    • DBマイグレーションの仕組みが無い
    • テストカバレッジが無い
    • 継続的インテグレーションが無い
    • コードが素人
  • 会場に、エキスパート Python プログラマーはいらっしゃいませんか!?

アプリの紹介はここまで


PythonのWebアプリの足回り


PythonのWebアプリの足回り

超概要。中身あまりないです。

  • WSGI
  • PasteDeploy (& PasteScript)

WSGI


WSGI(Web Server Gateway Interface)


WSGIアプリケーション

Hello World

def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    yield 'Hello World\n'

代表的なWSGI対応アプリケーション、フレームワーク

  • Django
  • Google App Engine
  • Pylons
  • TurboGears
  • Trac
  • Flask
  • Zope3
  • などなど

WSGIサーバ

WSGIアプリケーションを直接動かせるWebサーバ

  • ServletだとServlet Container(TomcatとかGlassFish)

代表的なWSGIサーバ

  • wsgiref
  • mod_wsgi
  • Paste HTTP Server
  • gunicorn
  • passenger(mod_rails)
  • など

PasteDeploy (& PasteScript)


PasteDeploy

http://pythonpaste.org/deploy/

WSGIアプリのための設定ファイルを扱うライブラリ

iniファイル形式でWSGIアプリケーションとWSGIサーバの設定を記述

[app:main]
use = egg:memocurial

[server:main]
use = egg:Paste#http
host = 127.0.0.1
port = 5000

WSGIアプリケーションとWSGIサーバのPasteDeploy対応が必要


PasteDeploy対応

entry_pointsを定義

[paste.app_factory]
main = myapp:make_app

コードはこんな感じ

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello'

def make_app(global_conf, **app_conf):
    """WSGIアプリを返す"""
    return app

if __name__ == '__main__':
    app.run()

PasteScript で起動

http://pythonpaste.org/script/

もともとはPaste(WSGIのためのユーティリティ集)のコマンドラインツール

PasteDeployの設定を利用してWSGIアプリを起動可能

% paster serve production.ini

指定したWSGIアプリケーションが、指定したWSGIサーバを使って動く

お手軽


mod_wsgi で起動

http://www.freia.jp/taka/blog/666

清水川Webで紹介されているラッパーを利用する

import os
from paste.deploy import loadapp

ini = os.path.join(os.path.dirname(__file__), 'wsgi.ini')
application = loadapp('config:%s' % ini)

PasteDeploy (& PasteScript)

  • 利点
    • PasteDeployにより起動方法を標準化できる
    • WSGIサーバを自由に選べる
  • 欠点
    • フレームワークに組み込まれていないと設定が難しい
    • 親プロジェクトのPasteがオワコン気味
    • Python3未対応


質疑応答


ご静聴ありがとうございました