TurboGearsでCATWALK(2) [software]
前回から、随分、時間が空いてしまいました。でも、0.9は正式リリースされていません。。そのかわり、プレビューサイトができていました。このサイト、結構リンクが切れてますね。0.9a4で何が変わったのかが書いてあるChangelogのリンクも壊れていました。
インストール
coLinuxの環境は壊れてしまったので、Vmware player + Ubuntuな環境でセットアップ。前回同様、ダウンロードページから、ダウンロード&インストール。
留意点は、
# apt-get install python2.4-dev # wget http://cheeseshop.python.org/packages/2.4/P/PasteDeploy/PasteDeploy-0.5-py2.4.egg
くらいかな?
DBセットアップ
TurboTunesドキュメントと前回の記事を参考にセットアップ開始。
なぜか、sqliteでのセットアップが、autocommitという属性がないというエラーで落ちるので、PostgreSQLに変更。ここでもちょっとはまって、pgdbモジュールがなぜかUNIX domain socketでは接続にいかないため、postgresql.conf で tcpip_socket = true を設定し、postgres を再起動。
その後、turbotunes用のユーザとデータベースを作成。
# su postgres $ createuser turbotunes $ createdb turbotunes
ここで、tq-admin sql create でDBのセットアップ。というところなんですが、これがまたうまくいきません。そこで、tq-admin sql sql でSQL文を出力させ、それを手動で変更。セミコロンを追加したり、順番を変えたりする必要あり。以下、SQL文。
CREATE TABLE artist ( id SERIAL PRIMARY KEY, name VARCHAR(200) ); CREATE TABLE artist_genre ( artist_id INT NOT NULL, genre_id INT NOT NULL ); CREATE TABLE genre ( id SERIAL PRIMARY KEY, name VARCHAR(200) ); CREATE TABLE album ( id SERIAL PRIMARY KEY, name VARCHAR(200), artist_id INT, CONSTRAINT artist_id_exists FOREIGN KEY (artist_id) REFERENCES artist (id) ); CREATE TABLE song ( id SERIAL PRIMARY KEY, name VARCHAR(200), album_id INT, CONSTRAINT album_id_exists FOREIGN KEY (album_id) REFERENCES album (id) );
これを、init_pgsql という名前で保存しておいて、
# psql -U turbotunes turbotunes turbotunes=>\i init_pgsql
で手動で実行。。。何のためのヘルパースクリプトなんでしょう。
さあ、実行
まずは、model.py、controllers.py を変更します。model.py は、
Genre.createTable(ifNotExists=True) Artist.createTable(ifNotExists=True) Album.createTable(ifNotExists=True) Song.createTable(ifNotExists=True)
なんかが追加されていますね。
それから、controllers.py へのリンクが間違っています。http://www.turbogears.org/preview/docs/TurboTunes/controllers.py ですね。しかし、このファイルには一部誤りがあります。
from turbogears.catwalk import CatWalk ではなく、
from turbogears.toolbox.catwalk import CatWalk です。
あと、turbotunes用の画像がないので、http://www.turbogears.org/docs/TurboTunes/turbotunes.zip からダウンロードして
このstaticディレクトリをプロジェクトのstaticディレクトリへコピーします。
ここで、http://localhost:8080/ にアクセスすると、xTunesなサイトが表示されます。
関連サイト
- Google Group: turbogears-ja ができてますね
- http://www.moo-channel.net/Members/moo/turbogears/turbotunes に訳があります(リンクも修正してありますね)
OSC2006 [software]
オープンソースカンファレンス2006 Tokyo/Spring(大久保)を見に行きました。LinuxカーネルからOpenOffice、XOOPSやJBOSSなど、様々なOSSのセミナーがありました。JBOSSは社長さんが来日されていたそうですね。また、セミナーだけではなく各種ユーザ会もたくさん出展されていました。KNOPPIXやOpenOffice2.0のCDの配布も。
明日(18日)もたくさんのセミナー(出張カーネル読書会、XOOPS、仮想化、Catalyst、Ruby、vim、Samba等)、展示(MONA、OSASK、赤坂Perlモンガーズ?、なでしこ等)があります。当日いきなりも可能で、しかも無料ですので、参加してみてはどうでしょう。
それから、翔泳社さんやオライリー・ジャパンさんが10%引き本を持ちこんで出店されていました。Perlプログラミング救命病棟や実用 Perlプログラミング 第2版も10%引きで!につられ、思わず買ってしまいました。
あれ?実用Perlプログラミングは発売が24日ですよね? Amazon店にも並んでいないようです。作者は、Simon Cozensさん。内容は、邦題についている「実用」とはちょっと離れていると感じました。元のタイトル(Advanced)の通り、「上級Perlプログラミング」や「一歩進んだPerlプログラミング」がよいのではないでしょうか。YAPC::Asia 2006 Tokyoを見に行く人は必読でしょう。
TurboGearsでCATWALK(1) [software]
PythonでWebアプリケーション
Pythonの注目のWebフレームワークであるTurboGearsをウォッチしていたところ、新しいチュートリアルページ:TurboTunesが開設されていました。
TurboTunes
http://www.turbogears.org/docs/TurboTunes/index.html
CATWALKのクリップビデオがかっこよかったので、インストールしてみることにしました。
といっても手軽に今使っているWindows環境にインストールしてみたかったので、coLinux + Debianで試してみました。
coLinux + Debian
coLinux + Debianのインストールは、Cooperative Linux(coLinux)のメモに書いてあるとおりに行えば簡単です。
エディターやgcc、glibcなどの開発環境をapt-getで入れていきます。外部へのアクセスにProxyを必要とする場合は、/etc/apt/apt.conf.d/70debconf に
Acquire::http::Proxy "http://proxy.example.com:8080/"; Acquire::ftp::Proxy "http://proxy.example.com:8080/";
などと書いておきます。また、モジュールのダウンロードのwgetを使用するなら、/etc/wget-rcに以下を設定します。
http_proxy = http://proxy.example.com:8080/ ftp_proxy = http://proxy.example.com:8080/ use_proxy = on
TurboGearsの前準備
TurboGearsはPython2.4を必要とするので、python2.4を入れておきます。
# apt-get install python2.4 # cd /usr/bin # ln -s python python2.4
また、TurboGearsで使用するデータベース(postgreSQL, MySQL, SQLite等)もapt-getしておきます。
# apt-get install sqlite # apt-get install python2.4-sqlite
次に、pythonモジュールを簡単にインストールするために、setuptoolsを入れておきましょう。
# wget http://cheeseshop.python.org/packages/source/s/setuptools/setuptools-0.6a6.zip # unzip setuptools-0.6a6.zip # cd setuptools-0.6a6 # python setup.py install
TurboGearsのインストール
さて、それでは、ダウンロードページから、TurboGearsに必要なモジュールを入れていきます。しかし、TurboTunesのチュートリアルを見ると、対象レベルはTurboGears0.9からとなっています。現在(11月16日)は0.83aまでしかりリースされていません。
そこで、Nightly SnapShotで開発中のパッケージをダウンロードします。
# wget http://www.opensource4you.com/turbogears/TurboGears-0.9a0dev_r200-py2.4.egg # wget http://www.opensource4you.com/turbogears/FormEncode-0.2.3dev_r1236-py2.4.egg # wget http://www.opensource4you.com/turbogears/Paste-0.4dev_r3677-py2.4.egg # wget http://www.opensource4you.com/turbogears/kid-0.7.1-py2.4.egg # wget http://cheeseshop.python.org/packages/2.4/P/PasteDeploy/PasteDeploy-0.3-py2.4.egg # wget http://cheeseshop.python.org/packages/2.4/P/PasteScript/PasteScript-0.3.1-py2.4.egg # wget http://www.turbogears.org/download/eggs/cElementTree-1.0.2-20050302.tar.gz # wget http://www.turbogears.org/download/eggs/RuleDispatch-0.5a0dev_r2097.zip # wget http://www.turbogears.org/download/eggs/PyProtocols-1.0a0dev_r2082.zip # wget http://www.turbogears.org/download/eggs/elementtree-1.2.6-py2.4.egg # wget http://www.turbogears.org/download/eggs/json_py-3.2.1-py2.4.egg # wget http://www.turbogears.org/download/eggs/SQLObject-0.7.0-py2.4.egg # wget http://www.turbogears.org/download/eggs/CherryPy-2.1.0_rc2-py2.4.egg
拡張子がtar.gz、zipは、
# tar zxvf <パッケージ名>.tar.gz または unzip <パッケージ名>.zip # cd <パッケージ名) # python setup.py installのようにインストールし、拡張子はeggの場合は、
# easy_install <パッケージ名>.eggでインストールします。
TurboTunesチュートリアル
それでは、チュートリアルに従い、セットアップしていきます。ヘルパースクリプトの実行
まずは、ヘルパースクリプトを使用して、プロジェクトを作成します。# tg-admin quickstart Enter project name: turbotunes Enter package name [turbotunes]: creating directory turbotunes generating turbotunes/dev.cfg generating turbotunes/prod.cfg generating turbotunes/turbotunes-start.py generating turbotunes/setup.py creating directory turbotunes/turbotunes generating turbotunes/turbotunes/__init__.py generating turbotunes/turbotunes/controllers.py generating turbotunes/turbotunes/model.py creating directory turbotunes/turbotunes/sqlobject-history creating directory turbotunes/turbotunes/static/css creating directory turbotunes/turbotunes/static/images creating directory turbotunes/turbotunes/static/javascript creating directory turbotunes/turbotunes/templates generating turbotunes/turbotunes/templates/__init__.py generating turbotunes/turbotunes/templates/master.kid generating turbotunes/turbotunes/templates/welcome.kid creating directory turbotunes/turbotunes.egg-info generating turbotunes/turbotunes.egg-info/sqlobject.txt running egg_info writing requirements to ./turbotunes.egg-info/requires.txt writing ./turbotunes.egg-info/PKG-INFO writing top-level names to ./turbotunes.egg-info/top_level.txt
データベースの設定
# cd turbotunes # vi dev.cfg [global] # DATABASE sqlobject.dburi="sqlite:///root/python/turbotunes/turbotunes.db"
モデルの設定
# vi turbotunes/model.py """ジャンル""" class Genre(SQLObject): name = StringCol(length=200) artists = RelatedJoin('Artist') """アーティスト""" class Artist(SQLObject): name = StringCol(length=200) genres = RelatedJoin('Genre') albums = MultipleJoin('Album') """アルバム""" class Album(SQLObject): name = StringCol(length=200) artist = ForeignKey('Artist') songs = MultipleJoin('Song')
データベースの作成
# tg-admin sql create Using database URI sqlite:///root/python/turbotunes/turbotunes.db
コントローラの作成
# vi turbotunes/controllers.py import turbogears from turbogears import controllers from turbogears.catwalk import CatWalk import model class Root(controllers.Root): catwalk = CatWalk(model) @turbogears.expose() def index(self): return dict()
自前のHTTPサーバの起動
# python turbotunes-start.py 2005/11/16 19:39:02 CONFIG INFO Server parameters: 2005/11/16 19:39:02 CONFIG INFO server.environment: development 2005/11/16 19:39:02 CONFIG INFO server.logToScreen: True 2005/11/16 19:39:02 CONFIG INFO server.logFile: 2005/11/16 19:39:02 CONFIG INFO server.protocolVersion: HTTP/1.0 2005/11/16 19:39:02 CONFIG INFO server.socketHost: 2005/11/16 19:39:02 CONFIG INFO server.socketPort: 8080 2005/11/16 19:39:02 CONFIG INFO server.socketFile: 2005/11/16 19:39:02 CONFIG INFO server.reverseDNS: False 2005/11/16 19:39:02 CONFIG INFO server.socketQueueSize: 5 2005/11/16 19:39:02 CONFIG INFO server.threadPool: 0 2005/11/16 19:39:02 HTTP INFO Serving HTTP on http://localhost:8080/
ブラウザでアクセス
No access for 192.168.0.1 By default only localhost (127.0.0.1) has access to CatWalk. You can provide access to your client by passing your host address to CatWalk as a parameter. Ex: from turbogears.catwalk import CatWalk catwalk = CatWalk(model,allowedHosts=['127.0.0.1','192.168.0.1'])アクセスエラーが出るので、コントローラーのCatWalkオブジェクトの生成時にallowedHostsを指定し、HTTPサーバを起動します。 もう一度アクセスしなおすと、TurbeTunesのTOPページが表示されます。 以下は、Artistの項目のStructureを表示したものです。 その後、データの追加でエラーが発生しました。とりあえず、今日のところは、ここまでにして、0.9のリリース判が出たら、また試したいと思います。 ---