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

チケット #226 (new ブログ) — at バージョン 2

登録: 17 年

最終更新: 17 年

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

報告者: hirobe 担当者: weekbuild
優先度: (´ー`*) コンポーネント: TracDoc
バージョン: キーワード:
関係者:

説明 (最終更新者: hirobe) (diff)

チャララッチャッチャ。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って何か知らんけど。

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

チケットの履歴

更新者: hirobe (17 年 前)

  • 添付ファイル image[2].png が登録されました。

更新者: hirobe (17 年 前)

  • 添付ファイル image[5].png が登録されました。

更新者: hirobe (17 年 前)

更新者: hirobe (17 年 前)

更新者: hirobe (17 年 前)

  • 分類感想・要望 から ブログ に変更されました。

更新者: hirobe (17 年 前)

  • 説明 が変更されました (diff)
Note: チケットについてのヘルプは TracTickets を参照 して下さい。