Warning: リポジトリと同期できません (サポートされていないバージョンコントロールシステム "svn です。 Python のライブラリに "svn" が正しくインストールされているか確認してください。)
Posts for the month of May 2008

HyperEstraierプラグインTrac0.11版

HyperEstraierプラグインTrac0.11版をCodeReposにUPしました。

ドキュメントはこちら

ただ、1月ほど前に作ったやつなので、最近は動作確認してない。 うごかなかったらご連絡ください。

GoogleAppEngineでTracは動くのか!?(挫折編)

チャララッチャッチャ。3時間クッキングの時間です。材料は、旬のGoogleAppEngineSDK と Trac0.11rc1 ,Gneshi 0.4.4です。

GoogleAppEngineはアカウントを取得し、SDKでHellowWorldが表示できるところまで下ごしらえをしておいてください。

GoogleAppEngineの使いかたについては、 こちらのブログ をおススメします。すごいねぇ。

下調べ

さて、まず GoogleAppEngineの資料 を取り出しましょう。Python2.5.2が動くけど、いろいろ制限はあるようです。

  • DBはGoogleが用意したDatastoreを使え(でも、Python2.5.2ならSQLiteが使えるのかな?)
  • PurePythonなコードしか使えません。C拡張を使うのはダメってこと。これはPython Standard Libraryであっても同様。(たとえば、tempfileは不可)
  • 基本的に、サーバ内のファイルに書き込みできません。データを蓄えたければ、AppEngineのデータストアを使用してください。
    • アップロードしたソースは書込み禁止属性がつく
    • loggingは使える。管理コンソールからも見れるよ( 参照
    • ファイルアップロード機能は、AppEngineのデータストアを使えば実現可能?( 参照
  • socket通信は不可。HTTP,HTTPSのみURLFetchサービスを使えばOK
  • サブプロセスやスレッドは不可
  • リクエストに対する処理があまり長いと、切断されるよ
  • signalsのようなシステムコールは使えません

制限を読むと、難しそうですねぇ。

材料を並べる

まず、作業フォルダをつくります。GoogleにUPするさいのアプリケーションIDを名前につけましょうか。

そこに、材料(Trac0.11rc1とGenshi 0.4.4)を並べます。材料は解凍して、作業フォルダからPythonがパスをうまくたどれるようにきれいに並べましょう。以下のようなフォルダ構成になればOKです。

さらに、repos_parentというフォルダを同じフォルダ下に作ります。これは、TracEnvを置く親フォルダです。その下に、TracEnvのフォルダを配置します。TracEnvは事前に作成しておいてください。TracEnvのフォルダをソースと同様に扱うということは、Tracから書き換えできなくなるということですが、その解決方法は後で考えます。

つづけて、app.yamlをおきます。中身はこんな感じ

application: [アプリケーションID]
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
  script: trac_gae.py

trac_gae.pyを呼び出す形で書いていますね。trac_gae.pyを作ります。gaeはGoogleAppEngineの略です。ちなみにこのソースは、 ここ を参照しています。

import os
os.environ['TRAC_ENV'] = 'repos_parent/[TracEnvのフォルダ名]'
import trac.web.main
application = trac.web.main.dispatch_request

こんな感じの構成になりましたか?(イメージ中devtracというフォルダがTracEnvのフォルダです)

余談:データアクセスについて

GoogleAppEngineは、ファイルの書き込みを許さず、DBとしてはDatastoreなるものしか使えない。これにより、既存のPythonのWebアプリはそのままではまず動作しない。

ただし、Tracでは0.10以降、さまざまな種類のDBサーバに対応するために、DBアクセス部分をプラグイン化しており、GoogleAppEngineのDatastore用のプラグインを作れば、動くかもしれないと期待できある。動くといいなぁ。

火を通す

では、動かしてみます。

エラーになった。

  File "c:\python25\lib\site-packages\Trac-0.11b2-py2.5.egg\trac\__init__.py", l
ine 14, in

どうやら、先ほど配置したのと別のTrac(このPCにはもうひとつTracがインストールしてある)を見に行っているようだ。そっちじゃないよ!

うまくわける方法が分からんので、とりあえずPythonインストールフォルダのsite-packagesフォルダを変名する。.bakをつけとこう

さあ、どんどんエラーが出てきた。めげずにがんばろう

ImportError: No module named pkg_resources

この辺は、どんどんモジュールを加えていこう。ちなみに、pkg_resourcesはsetuptoolsに入っている。 ここから ソースをダウンロードしてsetuptoolsフォルダとpkg_resourcesフォルダを作業フォルダにいれる。

  File "C:\doc\GoogleAppEngine\irove\pkg_resources.py", line 23, in
ImportError: cannot import name utime

さっきも見たな。このエラー。

なぜかsite-packageの方のTracを参照してしまう。site-package内のTracを変名して回避成功。

  File "C:\doc\GoogleAppEngine\irove\pkg_resources.py", line 1247, in _get
    stream = open(path, 'rb')
  File "C:\Program Files\Google\google_appengine\google\appengine\tools\dev_apps
erver.py", line 739, in __init__
    raise IOError(errno.EACCES, 'file not accessible')
IOError: [Errno 13] file not accessible

open(path, 'rb')が使えなさそうだということころで、挫折orz。

まとめ

そんなわけで、今回は大失敗に終わったのだが、まだ希望がないわけではない。

ここ で、setuptoolsをつかう方法が紹介されているのだっ!!Pylonsって何か知らんけど。

もうちょっと勉強して、再チャレンジしよう。

Trac0.12の日本語化作業

Tracの本を書いたtakayamaさんが、CodeReposでTrac0.12での国際化対応(日本語化)をやっていると伺ったので、いっちょかみさせていただくことに。

詳しくはここを参照。

ぱっと見ほとんどが日本語に翻訳されているので、こんなんすぐ終わるんじゃねぇの?と甘く見ていたんですが、そうでもなかったです。ごめんなさい。

Trac側のテンプレートがまだ十分に対応できてないので、翻訳しても反映されないのがあるなど、なかなかに時間がかかりそう。

まあ、そもそもTrac0.12の話なので、のんびりやればいいのかな。 興味のあるかた、いっしょにどうですか?

Trac本

twitterで、Tracの入門本ができたと聞きましたので、びっくりしてご紹介リンク張らせていただきます。

「入門Trac」と言う本を書きました

とうとうというか、ついにTrac本がでますね。

本屋の専門書コーナーを眺めて「Tracの本は何故ないんだろう」という日々ともおさらばです。しみじみ。

Windows Live WriterにAtompubのサービス文書を自動取得させる。

Windows Live WriterにAtompubのサービス文書を自動取得させる方法が わからなくて1月以上苦しんでいたんだけど、 やっと自動取得できるようになった。

具体的には、以下のリンクタグをHTMLのHEADタグ配下に埋め込めばよい。1つめのリンクがそれ。
なお、あくまでこれはWindows Live Writerで私が試してうまくいっただけの方法。AtomPubの正式な仕様ではないようだ。
ちなみに2つめのリンクはwlwmanifest.xmlのありかを示すリンク。

<link rel="service" href="[サービス文書のURL]" type="application/atomsvc+xml"  />
<link rel="wlwmanifest" href="[wlwmanifest.xmlのURL]" type="application/wlwmanifest+xml" />

ネタ元はこちら

RSDとか調べてえらく遠回りした気がする。AtomPub関連はまだ十分な資料がWebにないなぁ。

あ、そんな中で、たけまるさんのブログは大変参考になりました。もっと早く見つけていればぁ。

あと、AtomPubについて参考になるのは、 こちらのブログで取り上げられている、RFCの日本語訳と、WEB+DB PRESS Vol.41かと。 WEB+DB PRESSはたまたま買っていた。かなり助かった。

PyDevでTracのpluginをつくる。

以前、テスト用ブログに書いていた、PyDevでTracのpluginを開発するをwikiに移動しました。
記事は上記のリンクを参照。

Google App Engineのおかげで、Pythonに追い風が吹いていますねぇ。
もっと 伸びろ♪

このサイトのTracを0.11rc1に

Trac0.11rc1がリリースされたので、 さっそくこのサイトをrc1にしてみた。

さくらインターネットにTracを構築する(Trac0.11b1) にそってTrac0.11b1がインストール済みの状態で、

easy_install Trac==0.11rc1

だけでOK。らくちん。
(もちろん、プラグインが動かなくなっている可能性はあり。ちょっと ドキドキだったけど、ひととおり動いているみたい)

py-libフォルダにTrac-0.11b1-py2.4.eggが残るので、 それは手で削除(または移動)すること。