Make組ブログ

Python、Webアプリや製品・サービス開発についてhirokikyが書きます。

feedjack 導入のまとめとハマった点(MEDIA_URL とか)

feedjack は Django ベースのフィードリーダです。Planet というフィードリーダに似ているらしい。

公式ページの Instraition が優秀なんで楽だけど、MEDIA_URL とかでハマったので書く。

導入方法まとめ

公式サイトの Instration をもう一度まとめておく。(ハマった点は後で書く)

  • Python 2.3 以上
  • Feedparser 4.1
  • Django の最新版 (1.0 beta 1 より古い 0.9.16 以上)

以上の環境で feedjack を setup.py install で導入。

まず、feedjack 用の静的ファイルを Django に置く必要がある。feedjack 用の静的ファイルは MEDIA_URL/feedjack に用意する必要があるので、settings.py に MEDIA_URL (と MEDIA_ROOT) を設定してやる。

例えば MEDIA_URL が /var/www で解決され、feedjack が

/usr/lib/python2.4/site-packages/Feedjack-0.9.0-py2.4.egg

にインストールされているときは、

ln -s /usr/lib/python2.4/site-packages/Feedjack-0.9.10-py2.4.egg/feedjack/static/feedjack /var/www/feedjack

を実行してやればよい。

あとは毎度の
settings.INSTALLED_APP に 'feedjack' を追加。
./manage.py syncdb 実行。
urls.py にも追加。patterns('', url(r'', include('feedjack.urls')), )
でとりあえずは完了。

ハマった点

MEDIA_URL の設定でハマった。MEDIA_URL とADMIN_MEDIA_PREFIX で衝突してたのが原因とかなんとか。
以下で解決。

開発時と運用時で設定を変えるとやりやすい。
開発時は urls.py で無理矢理渡してしまう。運用時の設定については dotcloud の公式ドキュメントに書いてあった。

そもそも MEDIA_URL、MEDIA_ROOT を知らないなら、そこから把握すべき。

設定

あとの Configurations: にはハマりどころがほとんど無いので、まとめは無し。
注意点2つ

1つめ

公式ドキュメント上の Site ってのは feedjack で追加されるモデルであって、

from django.contrib.sites.models import Site

の Site じゃない。admin サイトとかで見てみればよく分かる。

2つめ

feedjack_update.py するときに

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

こんなのがでるときは

PYTHONPATH=/path/to/projects feedjack_update.py --settings=myproject.settings

でいける。
feedjack_update.py が myproject のパスを知らなかったから上記のエラーがでたみたい。DJANGO_SETTINGS_MODULE の代わりに feedjack_update.py に --settings で settings の位置を教えている。これだけだと、プロジェクトの大元のパスが分からないので PYTHONPATH という環境変数で教える。
同じように django-admin.py するときにも必要らしいけど、manage.py がこの処理をやってくれてるから今まで意識する必要がなかったようだ。

おわりに

ここまでやって気づいたけど、feedjack は私の要求からちょっとズレてる気がする。単純にフィードリーダが必要っだったんだけど、Planet とやらはちょっと違うみたい。他のライブラリで django-feedreader とかあるしそっちも試してみるつもり。

余談

Django 1.3 からは MEDIA_URL の値をスラッシュで終わらせろと書いてるけど、無くても feedjack は動く。feedjack は MEDIA_URL/feedjack を参照するので、仮にスラッシュがあっても

http://localhost:8000/media//feedjack

みたいにスラッシュが重なるだけで全く問題ないみたい。

あと、コンテクストどうのこうのの処理が、feedjack の fjlib.py と views.py で書かれてるので読んどくと面白い。