FastCGIは駄目かもしれない

2006年11月25日(土) 13:06 この記事をクリップ!

 

20日ころからfastcgiで動作しているこのブログが非常に不安定になってます。
DreamhostのフォーラムやdjangoのIRCで同様の報告があがっているようです。

このブログのfastcgi設定方法は0.95以前のものだったので、この機会に0.95以降の設定に変更をしてみました。実は引数が有効にならず、デフォルトのprefolkになっているだけじゃないか?
が、改善されません。エラーログにはよくあるfastcgiのエラーが。。。
FastCGI: incomplete headers (0 bytes) received from server

今のところの設定内容は、以下のようになっています。
.htaccess
AddHandler fastcgi-script .fcgi
RewriteEngine On
RewriteBase /
RewriteRule ^(media/.*)$ - [L]
RewriteRule ^(admin_media/.*)$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ everes.fcgi/$1 [QSA,L]

everes.fcgi
#!/usr/bin/env python2.4
import sys,os
sys.path.insert(0, '/USER/lib/python2.4/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'everes.local_settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(["method=threaded", "daemonize=false"])

runfastcgiの引数は、ドキュメントではキーワード引数ですが、ドキュメントのコメントにあった形式でやってみました。
error.logにはFastCGIでよくあるエラーが。どうしたもんだろ。mod_pythonいいなぁ
FastCGI: incomplete headers (0 bytes) received from server

 Django勉強会 Disc1

2006年11月23日(木) 23:15 この記事をクリップ!

 

Django勉強会 Disc1を行いました(今回も場所はストラテクト研究所でした)。
参加者の感想等で捕捉できているエントリはdjango-jaのブックマーク一覧できます。

私の仕切りが悪く、本題に入ったころには1時間が経過していました。次回は1月の土曜日にもう少し長い時間で行えるように調整中です(興味のある方は、django-jaメーリングリストに入っておいてくださいね。django-ja以外に告知を行う前に募集人数に達してしまうと思いますので)。

諸事情により前回のDisc0に続き今回もプレゼン無し勉強会の予定でしたが、オザッ記でエントリされているDjangoAMFをデモしていただいて、Flexを使っている身としては興味津々でした。
検討会では、かねてからの懸念事項を解決するための方策が得られました。様々な事象に詳しい人がいるとはかどります。
実はDjango勉強会の参加者は、DjangoにプロポーザルやパッチをコントリビュートしているようなDjango人からphpを作っていた人、phpのフレームワークのコミッタ、Rails使いの人、ワンライナーの人等かなり濃い人が集ってきていて面白い場になっています(Seasaa関連のコミッタも参加予定だったし)。
いつもDjangoネタで私が何かする際には手伝ってくれるphpフレームワークRhaco作っている同僚も、今回はRhacoの宣伝ができたらしくうれしそうでした。

 DjangoのTemplateローダ

2006年11月22日(水) 01:32 この記事をクリップ!

 

ueblogのスクリーンキャストに対して、嘘の補足を行ってしまいました
嘘というのは「settings.pyのTEMPLATE_DIRSに対して設定を行わなくても、プロジェクト直下とアプリケーション直下のtemplatesディレクトリに対してサーチパスが設定される」というものです。
正解は「自動でサーチパスが設定される場所は、settings.pyのINSTALLED_APPSに登録されている各アプリケーション直下のtemplatesディレクトリに対してのみ」です。

嘘を書いてそのままというものあれなので、動作パターンの確認を行いました。

パターン1

TEMPLATE_DIRSINSTALLED_APPS
設定無しsample.app1
sample.app2

各アプリの下にサーチパスが設定されるtemplatesディレクトリを作成した。

以下、'+'はディレクトリ、'-'はファイルを表すこととする。また、test.htmlはbase.htmlを継承したテンプレートとする。

+sample
       + app1
             + templates
                        + app1
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/app1/templates/base.htmlが利用される

・'app2/test.html'をレンダリングすると、sample/app2/templates/app2/test.htmlとsample/app1/templates/base.htmlが利用される


パターン2

TEMPLATE_DIRSINSTALLED_APPS
設定無しsample.app1
sample.app2
+sample
       + app1
             + templates
                        + app1
                        - test.html
                        + app2
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/app1/templates/base.htmlが利用される

・'app2/test.html'をレンダリングすると、sample/app1/templates/app2/test.htmlとsample/app1/templates/base.htmlが利用される


パターン3

TEMPLATE_DIRSINSTALLED_APPS
設定無しsample.app2
sample.app1
+sample
       + app1
             + templates
                        + app1
                        - test.html
                        + app2
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/app2/templates/base.htmlが利用される

・'app2/test.html'をレンダリングすると、sample/app2/templates/app2/test.htmlとsample/app2/templates/base.htmlが利用される


パターン4

TEMPLATE_DIRSINSTALLED_APPS
$PROJECT_HOME/templatessample.app1
sample.app2
+sample
       + app1
             + templates
                        + app1
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html
       + templates
       - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/templates/base.htmlが利用される

'app2/test.html'をレンダリングすると、sample/app2/templates/app2/test.htmlとsample/templates/base.htmlが利用される


パターン5

TEMPLATE_DIRSINSTALLED_APPS
$PROJECT_HOME/templatessample.app1
sample.app2
+sample
       + app1
             + templates
                        + app1
                        - test.html
                        + app2
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html
       + templates
             + app2
             - test.html
       - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/templates/base.htmlが利用される

'app2/test.html'をレンダリングすると、sample/templates/app2/test.htmlとsample/templates/base.htmlが利用される


パターン6

TEMPLATE_DIRSINSTALLED_APPS
$PROJECT_HOME/templates2
$PROJECT_HOME/templates
sample.app1
sample.app2
+sample
       + app1
             + templates
                        + app1
                        - test.html
                        + app2
                        - test.html
             - base.html
       + app2
             + templates
                        + app2
                        - test.html
             - base.html
       + templates
       - base.html
       + templates2
       - base.html

・'app1/test.html'をレンダリングすると、sample/app1/templates/app1/test.htmlとsample/templates2/base.htmlが利用される

'app2/test.html'をレンダリングすると、sample/templates/app2/test.htmlとsample/templates2/base.htmlが利用される


Templateローダの振る舞い

優先度は以下の通りと考えられる。

・TEMPLATE_DIRSの最初に指定されたディレクトリを機転として指示された全てのテンプレートを探す

・見つからなかったテンプレートをTEMPLATE_DIRSの次番・またその次という順序で探す

・次に、INSTALLED_APPSの最初に指定されたアプリケーション直下のtemplatesディレクトリを機転として、見つからなかったテンプレートを探す

・同様にINSTALLED_APPSを順に探す


どのようにテンプレートを格納すべきか

・INSTALLED_APPSやTEMPLATE_DIRSの設定次第で選択されるテンプレートが変わらないように検討する。

・アプリケーション固有のテンプレートAPP/xxx_xxx.xxxはAPP/templates/APPの下にのみ格納する。

・プロジェクト全体に関わるテンプレートはTEMPLATE_DIRSに指定したディレクトリの直下に格納する。

・アプリケーション固有のテンプレートをプロジェクトとして上書きしたい場合には、TEMPLATE_DIRSに指定したディレクトリの直下にAPP/xxx_xxx.xxxとして格納する。


 djblogkit

2006年11月20日(月) 00:00 この記事をクリップ!

 

djangoのブログツールサンプル

 四季版オペラ座の怪人とIT業界

2006年11月19日(日) 21:44 この記事をクリップ!

 

母の都合で、父と観劇。父の業界に互助会があるのがうけた。
見たのは四季版オペラ座の怪人。
オペラ座の怪人は10年くらい前にHer Majesty'sで見たことがある。
まぁ、仕方ないんだけど劇場はこんな感じに違う。
はーまじぇすてぃーず
Her Majesty's posted from フォト蔵
四季劇場 - 海
四季劇場 - 海 posted from フォト蔵
劇団四季というのは、浅利慶太が「食えなければプロじゃない」としてからぐいぐいと観客動員を増やし、いまや自前の劇場を複数持っている。確かに劇団四季は舞台で食っていけている日本に殆どない劇団の一つだ。

ここに何となくITの世界と同じ構図があるんじゃないかと思い込んでみる。

今回見たオペラ座の怪人は、ロンドン発のウェーバー作曲。世界中でロングランを果たしたし、四季も来年の3月までロングランをしている。才能のある若い歌い手クリスティーンと怪人、クリスティーンの幼なじみ子爵のある意味三角関係物語。そう、クリスティーンは可愛い感じの美人で若くなければいけないし、怪人は仮面をかぶった状態ではかっこうよくかつ強そうでなければいけない。
なぜそんなことを書くのかというと、「クリスティーンはおばちゃん顔の女優さん、怪人は背がおばちゃん顔クリスティーンと変わらない、よって全然イメージがわかない」からだ。
実は以前にも劇団四季のミュージカルは見たことがある。そのうちの一つは、今は亡き本田美奈子出演の「ミス・サイゴン」。話自体は下らなかったけど、本田美奈子の歌はなかなか良く、競演の劇団四季の面々もなかなかの歌声を披露していた。これは四季が帝劇を使ってミュージカルを興行していた時代の話。
ミュージカルはマイクとスピーカーを利用するものらしいが、帝劇の頃は激しく拡声されたという印象は無かった。「ミュージカルってマイク使うんだ、だせー。」と思ったくらい。当然Her Majesty's等ヨーロッパで見たときも殆どマイクとスピーカーの存在は気にならなかった。
再びなんでこんなことを書くのかというと、「PAの質が悪く、たまにスピーカーからノイズが発生しそうだった。スピーカーが舞台より観客席側にあるため、場合に寄っては誰がうたっているのかが判別できなかった。複数人がうたう時は(そもそも歌がへたであるというものあるが)全員の声が同じスピーカーから聞こえてくるので反吐が出そうな状況だった」から。
disるのはやめようと思っていたんだけど、役者崩れ(崩れるようなものは無かったけど)として避難させていただく。
あんなものでカーテンコールを5回も6回もやらされちゃたまらんよ、実際。劇中劇の台詞で「払い戻しゼロだよ!」というものがあったが、聞いた瞬間「払い戻せ!」と思ったのでした。

話戻って、ITの世界と同じような構図。
1.劇団四季は、若い役者志望から「プロ」グラマと同じように見られている。若い役者志望は自分たちのことを将来のハッカーだと思い込んでいる。
2.商業主義に走るのは決して悪くないんだけど(そりゃ芝居で食っていけるのが一番だから)、パトロンが貴族ではなく一般大衆(というかあの広告代理店)だからといって子供だましのヘボクオリティが増長している。
これはまるで、重厚長大な設計をし、つたない実装を垂れ流して、知識の無いクライアントを騙している悪いIT業者のようではないか!とか言ってみるテスト。

え?これはなにがいいたいんだって?
単に四季版オペラ座の怪人の余りのひどさにむかついたから愚痴っただけです。

 Vim7で日本語入力までの道のり

2006年11月18日(土) 23:00 この記事をクリップ!

 

TextMateで日本語入力が出来るようになりました。ずっと求めていた機能が使えることになった途端、自分がエディタに求めていたことが分かりました。
自分が求めていたのは、「ファイルエクスプローラ+タブ」ではなく、「キーボード操作+なんでもできる」なのでした。
そういう意味ではAquamacsはemacsなので何でもできそうです。Aquaなので日本語の入力にも問題なく、テーマもたくさん入っていて好みなのですが、subversionを直にエディタから使おうと思うと面倒です。

もう一つ何でもできそうなエディタとして、最近流行のVim7というものがあります。拡張がPythonで書けるらしいです。ちょっと調べてみると、OSXで日本語入力に対応しようとすると結構面倒(XCodeでコンパイルってのもちょっと。エディタなのに)。
いやいや、あるじゃん。carbonなVim7が。というお話。

OSXでVim7日本語入力環境を作る

日本語環境を作る方法は、Mac Vim 再びずんWiki - vimのコードです。

macvimをダウンロード・展開して、vimをアプリケーションディレクトリに配置。

~/.vimrcを作成して、以下を記入するだけ。

set enc=utf-8 
set fenc=utf-8 
set fencs=utf-8,euc-jp,iso-2022-jp,cp932 
set ffs=unix 

if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("¥x87¥x64¥x87¥x6a", 'cp932', 'eucjp-ms') ==# "¥xad¥xc5¥xad¥xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("¥x87¥x64¥x87¥x6a", 'cp932', 'euc-jisx0213') ==# "¥xad¥xc5¥xad¥xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^¥(euc-jp¥|euc-jisx0213¥|eucjp-ms¥)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" □とか○でカーソル位置がずれないようにする
set ambiwidth=double

あれま、簡単。でも文字が汚いし、日本語はちょっと変。

やっぱりAquamacsかな。。。だれかvc-svn教えて!

追記: Subversion メモによると、簡単

Aquamacs/Contents/Resources/site-lispにpsvnというディレクトリを掘って、psvn.elを置く。

~/.emacs.elに以下を記述して、M-x svn-statusとかするだけ

;;-----------------------------------------------------------------
;; psvn.el
;;-----------------------------------------------------------------
(require 'psvn)

(define-key svn-status-mode-map "q" 'egg-self-insert-command)
(define-key svn-status-mode-map "Q" 'svn-status-bury-buffer)
(define-key svn-status-mode-map "p" 'svn-status-previous-line)
(define-key svn-status-mode-map "n" 'svn-status-next-line)
(define-key svn-status-mode-map "<" 'svn-status-examine-parent)

(add-hook 'dired-mode-hook
          '(lambda ()
             (require 'dired-x)
             ;;(define-key dired-mode-map "V" 'cvs-examine)
             (define-key dired-mode-map "V" 'svn-status)
             (turn-on-font-lock)
             ))

(setq svn-status-hide-unmodified t)

(setq process-coding-system-alist
      (cons '("svn" . euc-jp) process-coding-system-alist))

なかなか素晴らしい:)

 Djangoの日本語スクリーンキャスト(Tropyを作る)

2006年11月17日(金) 11:20 この記事をクリップ!

 

ueblogにて、Djangoの日本語スクリーンキャストが公開されました。
結城さんのTropyというランダム表示wiki?のクローンを30分で作っています。
解説付きで素晴らしいscreencastです。

Django使いのTextMateの使い方としても非常に勉強になります(調べる癖がついてないので、フィールド以外はいつも手書きしてた自分がかわいそうなくらい)。



ちょっとだけ補足を(screencastに問題があるわけではありません)。


追記:プロジェクト直下のtemplatesは自動認識はしませんでした。申し訳ありませんでした。

settings.pyにTEMPLATE_DIRSを設定する個所がありますが、プロジェクト直下かアプリ直下にtemplatesというディレクトリを掘った場合には、あえて記述しなくても構いません(わかりやすさのため等、記述することは何の問題もない)。


・templateで変数出力する際の記述は、 {{ object.prop }} のように{{と変数の間にスペースを挟むというのが、本家にコントリビュートする際のコーディング標準になっています(本家にコントリビュートする時以外はお好みで)。


 ○○研究所ラボw

2006年11月14日(火) 15:23 この記事をクリップ!

 

何となくrhacoで作成されたラボラボ(ただのあぐりげーたという話も・・)。
オーソライズされていない内容です、あしからず。
研究所ラボw

 矢田亜希子が結婚

2006年11月13日(月) 23:39 この記事をクリップ!

 

矢田亜希子が結婚してしまいました。おめでとうございます。

愛していると言ってくれのころから応援しているので、かれこれ11年になります。
娘のような気分で応援していたので、娘のように心配しています。
押尾学さん、妙な自信は程々にして働いてください。
矢田亜希子には、結婚したら引退してほしかったなぁ。ポジション取りが難しいでしょうけど、汚れ役にはならないでくださいね。
ファンが引退してほしいと思っているからなんだという話はおいておこう。
とにもかくにもおめでとうございます。
#押尾語録とか、押尾学も面白くて好きなんだけど、音楽は趣味にしてほしい

 Djangoのblogキット

2006年11月12日(日) 01:55 この記事をクリップ!

 

djangoのブログツールサンプルを探しているというコメントを受けて、1日かけてキットを作成しました(djblogkit)。
djblogkitのトップ画面
djblogkitのトップ画面 posted from フォト蔵
django0.95以降で動作すると思います(svn版でしか試してませんが)。
unicodeブランチマージ後のsvn版Djangoを使っている人はUnicode関連の修正をして下さい。
2008/08/06 追記:satosiさんが、0.97preで動作するように修正をしてくださったそうです :) → 0.97preで動作する版

 Django勉強会 Disc1でしたいこといろいろ

2006年11月09日(木) 11:04 この記事をクリップ!

 

Django勉強会Disc1を2006年11月22日に開催します。
今回はwikiを作る寺小屋と、何かについて検討する検討会を行う予定です。
寺小屋のwikiという題材は、Djangoについて知ってもらうために運営側のuemuraさんが用意を進めているものです。ほかに作りたいものがある人はwiki以外のものを作っても構いません。勉強会でやればDjangoの流儀やわからないことを聞けるかもしれません。
検討会というのは、上級者にいろいろなネタを振ってもらって、寺小屋してない人たちで検討するという漠然としたものです。誰も何も振ってこなかったら、ファイルフィールド等日本語周りについての検討とかできたらいいなとか思っています(1.0になる前にやらなきゃいけないし)。
運営側の人数を考えると募集が14人しかできないのがつらいので、おっきな会場が借りられるといいなぁ。

 Django勉強会 Disc1

2006年11月09日(木) 00:00 この記事をクリップ!

 

[2006年11月22日(水)のイベント]

Django勉強会 Disc1 を行います。

初心者・中級者寺小屋と上級者向け検討会を行います。

 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar