miyazawa.org

PyLucid

このサイトを作るのに色々悩んだ末に、PyLucidを使うことにしてみました。

選択肢に上がったのは

最初は、ByteFlowにしようと思っていたけど、うまくインストールできずに挫折 orz。moinmoinは、悪く無かったけど、Blogっぽいものが欲しかったので、ちょっと違う感じ。
で、最近Djangoにハマっているので、DjangoでできているPyLucidにしてしまった。
バージョンは、0.8.6-rc1。

インストールは、基本的にPyLucidのドキュメントにある通り。
ただし、展開してできる
pylucid_project/PyLucid/forms/filesystem.py
にある日付の部分からasciiでない文字列を削除しないと、インストールの
途中でエラーが発生してしまう。

PyLucidは、シェルが使えないレンタルサーバ上で使えるようにできているけど、逆に公開しているディレクトリの下にソースがそのまま置かれるのことを前提としているみたい。
ソースコードが、公開ディレクトリの下にあるのは、なんとなく寝覚めが悪い。そこで、ソースコードを別の場所に置くようにしてみたところ、多少コードに変更が必要だった。

公開ディレクトリの構成は以下のような感じ、

public_html
    .htaccess
    cgi_server.py
    index.cgi
    index.html
    media
        PyLucid
            ... (internal_page以外のjsなど)
    django
        contrib
            admin
                media
                    ...

残りは、別のディレクトリにあってもOK。
internal_pageを参照するために、MEDIA_ROOTを絶対パスでしているする必要がある。

ただし、sub_menuから利用するプラグインの管理ページが、pylucid_project/PyLucid/system/plugin_manager.pyのget_plugin_list()という関数がエラーを起こすようになる。

そこで、settings.pyにPYLUCID_INSTALLED_PATHという変数を用意して、pylucid_projectまでの絶対パスを設定するように変更し、for文の直前に
plugin_path = settings.PYLUCID_INSTALLED_PATH+plugin_path
という行を追加してあげればエラーが発生しなくなる。もともとプラグインの名前とディレクトリ名がバインドされているようで、os.listdir()でプラグイン名を取得しているので、この変更でも問題ないと思う。

[追記]
そのままだと、Styleシートを更新した場合に、分離したMEDIA_ROOTに出力されてしまうので、PUB_MEDIA_ROOTに公開用のmediaのパスを指定。
さらに、PyLucid/models/Style.pyのget_filepathでMEDIA_ROOTを使っている部分をPUB_MEDIA_ROOTに変更することで、解決できそう。