oinume journal

Scratchpad of what I learned

gunicornをローカル開発環境のWebサーバとして使う

--reloadオプションがバージョン19.0からサポートされたので、下記のような感じで起動するとローカルの開発サーバとして使える。

$ gunicorn --access-logfile - --log-file - --reload -b 127.0.0.1:3000 -w 1 app:app
  • --access-logfile: "-"を指定するとstderrにアクセスログが出る
  • --log-file: ↑と同様に"-"を指定するとstderrにエラーログが出る
  • --reload: ソースコードが変更されたらリロードする
  • -b: bindするアドレスとポートの指定
  • -w: ワーカー数

Python文法詳解

Python文法詳解

Flask + BeakerでセッションデータをRedisに保存する

やりたいこと

Redisをセッションデータの保存先にしたい

Beakerって?

様々なデータストアにセッションデータを保存するWSGI Middleware。WSGIレイヤーなのでFlask以外のWAF(bottleとか)でも使えるはず。

必要なもの

サンプルコード

gist9811874

動かす

$ pip install beaker flask redis git+git://github.com/bbangert/beaker_extensions.git
$ python beaker_sample.py

http://localhost:5000/ にアクセスしてみる

確認してみる

セッションデータが保存されているか確認してみる。

$ redis-cli
127.0.0.1:6379> keys *
1) "beaker:2c9ac3823d844bc0848d2b0fbb154fc1:session"
2) "beaker:3a049f5fcede47e396341b663563153b:session"

TIPS

デフォルトだとdb=0のデータベースに保存されるので、これを変えたい場合は

    'session.url': '127.0.0.1:6379',
    ↓
    'session.url': '127.0.0.1:6379?db=1',

みたいにすれば良いってことをソース見て学んだ。

Redis入門 インメモリKVSによる高速データ管理

Redis入門 インメモリKVSによる高速データ管理

nodemonを使ってFlaskなWebアプリを自動でリロード

最近のWebアプリケーションフレームワークだと、「開発している時はファイルの変更を検知して自動でアプリを再起動する」みたいな機能がある。PythonのFlaskで開発している場合は

#!/usr/bin/env python
from flask import Flask

app = Flask(__name__)
app.config.update({'DEBUG': True })


@app.route('/')
def root():
    return "Hello world!"


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

というコードを

$ python main.py

のように実行していると

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

となって自動リロードが有効になる。ただ、これってSyntax Errorが出る状態でファイルを保存してしまうとpythonのプロセス自体がそのままお亡くなりになるので、自分でコマンド叩いて起動し直さないといけない。

そこでnodemon。nodemonを使えばファイルの更新チェック自体はnodemonが行うため、Syntax Errorなコードを保存しても修正すればもう一度勝手にリロードしてくれる。

nodemonの使い方は簡単で

$ npm install -g nodemon

して

$ nodemon --exec python main.py

な感じで起動してやる。ただ、nodemonを使う場合は

app.run()
 ↓
app.run(use_reloader=False)

のようにFlaskでの自動リロードを無効にしてやる必要がある。

その他にも

  • コンソールから rs って入力しても再起動できたり
  • 変更検知の除外対象のファイルを指定できたりする

のが便利でnodemonはけっこう気に入っている。

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

Python3に対応したtomahawk 0.7.0をリリース

久々にtomahawkの新しいバージョンをリリース。今回はずっと放置していたPython3対応(Python3.2+)をやっとこさ完了した。

Python3はいろいろ変わり過ぎていてもう諦めようかなーと思っていたんだけど、去年のPyCon APACでsixっていうモジュールを知って、「これ使えばけっこう簡単にPython3対応できるのかー」と思ってやってみた。でも実際はそんな簡単にはいかず、特にunicodeとbytesの違いでけっこうハマってしまったけど。

あとは今回のバージョンから、ReadTheDocsホスティングしてるドキュメントのテーマをReadTheDocs謹製のものにしてみた。おかげでドキュメントのかっこよさはだいぶ増したはず。

自分的には大量のリモートサーバ操作には最近はFabricを使うことが多くて、もはやtomahawkはほとんど使ってないんだけど、コマンドの出力はやっぱりtomahawkの方が見やすかったりしてまだ手放せない状態。なのでしばらくは細々とメンテナンスをつづけようかなーと。

今後はtomahawk -> Fabricの流れを作っていくために、今回のリリースでも

  • ホスト指定を-hじゃなくて-Hにしたり
  • ~/.ssh/configをちゃんと優先するようにしたり

と、割とFabricに楽に移行できるようにしていってるところ。tomahawkのいいところはFabricにも移植していきたいので、Fabricのソースも読まないとなぁ。

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)