パーソナルツール
現在の場所: ホーム takalog plone 3 用のプロダクトを paster から作る
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
« 2012May »
Su Mo Tu We Th Fr Sa
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
このBlogについて
鈴木たかのりです。とりあえず日記っぽく雑多なことを書き込んでいこうと思っています。 zope/plone関係の技術的な内容については http://takanory.net の方にまとめていこうと思います。 コメント・ツッコミはご自由にどうぞ。
twitter facebook linkedin foursquare
カテゴリ
android (16)
av (27)
books (35)
coreblog (49)
ds (22)
emacs (8)
ferret (24)
google (34)
icecream (44)
lego (70)
mac (22)
misc (74)
moblog (277)
movie (33)
pc (44)
plone (338)
puzzle (42)
python (57)
server (67)
snowscoot (9)
software (125)
sports (32)
suidou (30)
winds (47)
 
文書操作

plone 3 用のプロダクトを paster から作る

作成者 takanori投稿日 2009年06月09日 00時45分 最終変更日時 2009年06月09日 00時48分

(第0回)Zope/Plone開発勉強会が無事終了 しました。

その中で自分の開発としては、 paster を使ってスケルトンコード作って、そこから plone 3 のプロダクトを作るという手順にチャレンジしてました。

変なところでハマってしまい時間切れとなりましたが、一応動くものはできたのでそこまでの手順をとりあえずまとめてみたいと思います。

プロダクトを作って公開する手順までをまとめると、おそらくこんな感じになるのではと思われます。

  1. paster でスケルトンコードを生成
  2. buildout.cfg 書く→ buildout
  3. コード書く
  4. サーバ立ち上げて確認
  5. きちんとできたら egg にする
  6. サーバに egg をアップする
  7. buildout.cfg 書く→ buildout
  8. サーバ立ち上げて確認
  9. リリース

で、今回は4のところまでいって egg を作るところで失敗して終わりました。いろいろまだまだ勉強するところがあるようです。

さて、以下は細かい手順をコードも含めて書きます。

その前に今後の予定や感想はこんな感じです。

  • plone 2.5 でもテスト→five対応が必要らしい
  • jQuery があるかどうかでの振り分けが必要なので考える
  • egg* にちゃんとする
  • Windows 上だとやっぱコマンドラインめんどう、Mac いいなぁ

1.paster でスケルトンコードを生成

paster create -t テンプレート という形でコマンドを実行すると、スケルトンコードが出力されます。

ここで使いそうなテンプレートは paster create --list-templates で見られるんですが、 plone 用のプロダクトとして使いそうなのはこのあたり。

  • archetype Archetypes を使ったプロジェクト
  • plone plone のプロジェクト
  • plone3_portlet plone 3 のポートレット
  • plone3_theme plone 3 のテーマ

今回は plone を選んだんですが、これが後々あだに。

開発中のコードは開発用の plone インスタンスの src ディレクトリの下というのが定番のようです。

以下はコードを生成しているところです。コードを生成するときに色んなことをいきなり聞いてくるので、心の準備をしていないとちょっと引いちゃいます。

まぁ、プロダクトの説明とかはあとで書けばいいかなといった感じ。

見ての通りこのプロジェクトは Plone Slimbox を plone 3 対応にするためのものです。

% cd /var/lib/plone3
% cd src
% paster create -t plone Products.PloneSlimbox
Selected and implied templates:
  ZopeSkel#basic_namespace  A project with a namespace package
  ZopeSkel#plone            A Plone project

Variables:
  egg:      Products.PloneSlimbox
  package:  productsploneslimbox
  project:  Products.PloneSlimbox
Enter namespace_package (Namespace package (like plone)) ['plone']: Products
Enter package (The package contained namespace package (like example)) ['example']: PloneSlimbox
Enter zope2product (Are you creating a Zope 2 Product?) [False]: False
Enter version (Version) ['1.0']: 0.5
Enter description (One-line description of the package) ['']: Slimbox(Lightweight Lightbox clone) for atct album view and COREBlog2 attachment image view.
Enter long_description (Multi-line description (in reST)) ['']: Slimbox(Lightweight Lightbox clone) for atct album view and COREBlog2 attachment image view.
Enter author (Author name) ['Plone Foundation']: takanori
Enter author_email (Author email) ['plone-developers@lists.sourceforge.net']: takanori@example.com
Enter keywords (Space-separated keywords/tags) ['']:
Enter url (URL of homepage) ['http://svn.plone.org/svn/plone/plone.example']: http://plone.org/products/plone-slimbox/
Enter license_name (License name) ['GPL']: MIT License
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
Creating template basic_namespace
:
------------------------------------------------------------------------------
The project you just created has local commands. These can be used from within
the product.

usage: paster COMMAND

Commands:
  addcontent  Adds plone content types to your project

For more information: paster help COMMAND
------------------------------------------------------------------------------
Running /usr/bin/python setup.py egg_info

最後のコメントは、「このプロジェクトの中で paster addcontent コマンドが使えるようになっているよ」ということのようです。

ためしにヘルプをみてみるとこんな感じでした。スケルトンコードの中でさらに addcontent を実行することによって、スケルトンを生成できるようです。 (まだ試していません)

% paster help addcontent
usage: /usr/bin/paster addcontent [options] [template name]
Adds plone content types to your project

options:
  -h, --help            show this help message and exit
  -v, --verbose
  -l, --list            List available templates for the current project
  -a, --list-all        List all templates regardless of the current project
  -q, --no-interactive
% paster addcontent --list
Available templates:
    form:        A form skeleton
    formfield:   Schema field for a form
    i18nlocale:  An i18n locale directory structure
    portlet:     A Plone 3 portlet
    view:        A browser view skeleton
    zcmlmeta:    A ZCML meta directive skeleton

生成されたスケルトンコードの構成を見てみると、こんな感じでした。

% cd Products.PloneSlimbox
% tree Products.PloneSlimbox/
Products.PloneSlimbox/
|-- Products
|   |-- PloneSlimbox
|   |   |-- __init__.py
|   |   |-- configure.zcml
|   |   `-- tests.py
|   `-- __init__.py
|-- Products.PloneSlimbox.egg-info
|   |-- PKG-INFO
|   |-- SOURCES.txt
|   |-- dependency_links.txt
|   |-- entry_points.txt
|   |-- namespace_packages.txt
|   |-- not-zip-safe
|   |-- paster_plugins.txt
|   |-- requires.txt
|   `-- top_level.txt
|-- README.txt
|-- docs
|   |-- HISTORY.txt
|   |-- INSTALL.txt
|   |-- LICENSE.GPL
|   `-- LICENSE.txt
|-- setup.cfg
`-- setup.py

4 directories, 20 files

2.buildout.cfg 書く

次に、このコードを plone サイトが読み込むように buildout.cfg に書きます。 eggsdevelop に以下のように書きます。 ただ、プロジェクト名が Products から始まらない場合は zcml も書かないといけないっぽいです。

[buildout]
:
eggs =
    Products.PloneSlimbox
develop =
    src/Products.PloneSlimbox

buildout コマンドを実行します。コマンド実行時に Develop: と出るのがポイントっぽいです。

% bin/buildout
Develop: '/var/lib/plone3/src/Products.PloneSlimbox'
Uninstalling instance.
Updating zope2.
Updating fake eggs
Updating productdistros.
Installing instance.
% cat develop-eggs/Products.PloneSlimbox.egg-link
/var/lib/plone3/src/Products.PloneSlimbox

4.サーバ立ち上げる

サーバを立ち上げて動作確認します。 テストなので zopectl> fg でフォアグラウンドかつデバッグモードで実行します。

% sudo bin/instance
program: /var/lib/plone3/parts/instance/bin/runzope
daemon manager not running
zopectl> fg
/var/lib/plone3/parts/instance/bin/runzope -X debug-mode=on

ここで paster でコード生成していた全員が zope の*``Control_Panel/Products`` 画面にはプロダクトが表示されるのに、 plone のアドオンプロダクトには表示されないということで長時間ハマる事態に。

正解は、 configure.zcml を編集して、 GenericSetup 系の設定を追加しないといけないということらしいです。 今になって考えてみると、 GenericSetup の設定をするか Extensions/Install.py が存在しないと portal_quickinstallerplone のプロダクトとして認識されないのは当たり前かなと。

編集前:

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five"
  i18n_domain="Products.PloneSlimbox">

編集後:

<configure
  xmlns="http://namespaces.zope.org/zope"
  xmlns:five="http://namespaces.zope.org/five"
  xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
  i18n_domain="Products.PloneSlimbox">

  <genericsetup:registerProfile
    name="default"
    title="PloneSlimbox"
    directory="profiles/default"
    description="PloneSlimbox"
    provides="Products.GenericSetup.interfaces.EXTENSION"
  />

</configure>

3.コードを書く

順番が前後しますが、ここで PloneSlimbox として動作するために最新のコードをチェックアウトして利用する。

skinsi18n はそのままコピー。 __init__.pyconfig.py もコピー。

そして profiles/default の下に GenericSetup 用の xml ファイルを作成する。

コードは CMFPlone についているコードを参考にしました。

skins.xml:

<?xml version="1.0"?>
<object name="portal_skins">
  <object name="plone_slimbox" meta_type="Filesystem Directory View"
    directory="Products.PloneSlimbox:skins/plone_slimbox"/>
  <skin-path name="*">
    <layer name="plone_slimbox" insert-after="custom" />
  </skin-path>
</object>

cssregistry.xml:

<?xml version="1.0"?>
<object name="portal_css" meta_type="Stylesheets Registry">
  <stylesheet title="" cacheable="True" compression="safe" cookable="True"
    enabled="1" expression=""
    id="slimbox2.css" media="screen" rel="stylesheet" rendering="import"/>
</object>

jsregistry.xml:

<?xml version="1.0"?>
<object name="portal_javascripts" meta_type="JavaScripts Registry">
  <javascript cacheable="True" compression="safe" cookable="True"
    enabled="True" expression="" id="slimbox2.js" inline="False"/>
</object>

ここまででサーバを再起動してプロダクトをインストールすると、きちんと思ったとおりに動作しました。(わーい)

5.eggにする

ここで、 egg をダウンロードしてインストールテストをしようと思い、とりあえず egg を見よう見まねで作ってみました。

% cd src/Products.PloneSlimbox
% python setup.py bdist_egg
% ls -l dist
Products.PloneSlimbox-0.5dev-py2.4.egg

出来上がったファイルを展開してみると、あれ、ファイルが足りない? どうやら txt とか xml ファイルとかが無視されているようです。 なにやら egg 用の設定を書かないといけないようですが、ここで時間切れ。

とりあえず http://plone3.takanory.net/photo で、今回作ったコードはちゃんと動いているようです。

カテゴリ
plone plone
python python
トラックバック用URL:
http://takanory.net/takalog/1101/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

Powered by vine linux, python, zope, plone, coreblog