nginxとpythonとpyramid スタートアップ
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
Pyramid1.3のβ版がリリースされました。
もう少しで正式リリースになると思うので構築手順をまとめてみました。
Fedora1.4 64bit(さくらVPS)+ python2.7.2で構築しています。

pythonのフレームワークといえばDjangoが人気だと思います。
日本語ドキュメントやプラグインも豊富なので今後もっと利用されるケースが増えると思います。
CoCなフルスタックフレームワークで、管理画面の自動生成が人気の理由かと思います。
自分は名前の由来(尊敬するギターリストの名前)だけで利用してみたのですが、ちょっと自由に作りたいな〜と思い別のフレームワークを探していてPyramidを試してみました。

PyramidはPylonsの後継で色々なオープンソースと組み合わせて利用するフレームワークです。
pythonで古くから利用されているsqlachemyやjinja2も組み合わせることができます。


pythonの仮想環境を利用するためにpythonbrewをインストールします。
utahtaさんのブログで詳しく解説されているので、こちらを参考にしてインストールしました。
とても解りやすく大変お世話になりました。
自分の環境では下記のパッケージを事前にインストールしておきました。

sudo yum install gcc.x86_64
sudo yum install make.x86_64
sudo yum install zlib-devel.x86_64
sudo yum install openssl-devel.x86_64
sudo yum install python-setuptools


仮想環境を作成してPyramidをインストールします。

mkvirtualenv pyramid
pip install pyramid


これだけで仮想環境(pyramid)上に最新のPyramidがインストールされます。
同じパソコンでDjangoとPyramidを使いたい、python3も試したい。。。時にとっても便利です。

今回はこのへんで。

2012/03/03 05:31 | Comments(0) | プログラム
Djangoとloggingとprofile
サムライファクトリーの平成コンビがお送りするWebサービスダイナシ
画像にコメントをつけて、ぜひ楽しんでください。
開発中に変数の中身を確認するのにDEBUGレベルでログに出力し、本番環境では出力したくない場合の設定を試してみました。

■ログ出力
プロジェクトを作成するとsettings.pyにログの設定が記述されています。
LOGGIN変数に設定を追加することで標準出力にログを出力することが出来るようになります。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'app': {
'handlers': ['console'],
'level': 'INFO',
'propagate': True,
},
}
}


ログを出力したいプログラムに出力用のコードを記述します。

import logging

logger = logging.getLogger('app')

def detail(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
logger.debug(p);
return render_to_response('polls/detail.html', {'poll': p},
context_instance=RequestContext(request))


ログファイルに変数pの内容が出力されます。

■プロファイル
環境毎にログの出力レベルを変更するのにdjango-configプラグインを利用しました。
pipからインストールが出来ます。

sudo pip install django-config


django-configを導入するとsettings.py内でconfig/base.pyが実行されます。
環境変数CONFIG_IDENTIFIERに設定された値のファイルが実行され上書きされます。

例)環境変数 CONFIG_IDENTIFIER=test
settings.py -> config/base.py -> config/test.py


mkdir config
cp settings.py config/base.py


settings.pyの内容を書き換えます

"""
Django-config settings loader.
"""

import os

CONFIG_IDENTIFIER = os.getenv("CONFIG_IDENTIFIER")

# Import defaults
from config.base import *

# Import overrides
overrides = __import__(
"config." + CONFIG_IDENTIFIER,
globals(),
locals(),
["config"]
)

# Apply imported overrides
for attribute in dir(overrides):
# We only want to import settings (which have to be variables in ALLCAPS)
if attribute.isupper():
# Update our scope with the imported variables. We use globals() instead of locals()
# Because locals() is readonly and it returns a copy of itself upon assignment.
globals()[attribute] = getattr(overrides, attribute)


設定を上書きしたい内容をconfig/test.pyに記述します。

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'app': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}


uwsgiの設定ファイルに環境変数CONFIG_IDENTIFIERを追加します。

uwsgi:
env: DJANGO_SETTINGS_MODULE=settings
env: CONFIG_IDENTIFIER=test
省略・・・


2011/11/06 14:28 | Comments(0) | TrackBack() | プログラム

<<前のページ | HOME | 次のページ>>