Personal tools
You are here: Home Zope&Plone Tips httpアクセスZODB自動pack
Document Actions

httpアクセスZODB自動pack

by maru last modified 2007-07-25 23:47

Zope-2.8.6では出来ていたhttpアクセスからのZODB packがZope-2.9.7では出来なくなっていました。(;´Д`)

【環境】

  • Python-2.4.4 (Linux)
  • Zope-2.9.7-final (Linux)

 Plone-2.5.3 (+Zope-2.9.7-final) に移行してから数日して、ふと Data.fs のファイルサイズを見てみると数十倍に膨れあがっており、なんだかえらいサイズになってました。おかしいな・・・。毎週 cron で http://~/manage_pack の URL を叩いて pack してるはずなんだけど・・・。

 で、そのスクリプトを流してみるとこんな感じに wget で error が出ちゃってました・・・。

Zope [main] db packing....
http://localhost:xxxx/Control_Panel/Database/main/manage_pack?days:float=1:
23:48:14 エラー 403: Forbidden。
Zope [main] db packing done.

 よ、403とな(;´Д`) ぬぅうう。今まで(少なくとも Zope-2.8.6 まで)すんなり出来てたのですけど、 Zope-2.9.x系 で仕様が変わったのか。

 今度はブラウザ経由で一旦 http://localhost:xxxx/manage に入ってから、再度 wget でたたいているURLを打ち込んでみると、

Site Error

An error was encountered while publishing this resource.

Error Type: Forbidden
Error Value: Request must be POST

 やっぱり・・・。GETでやんなヴォケ!!ってか。とは言っても、wget で POSTオプション付けてたたけばいいだけかな。ということで、以下のように変更。

#!/bin/sh
HOST=localhost
PORT=xxxx
USER=hoge
PASS=hogepass
DB=main
DAYS=1

URL=http://$HOST:$PORT/Control_Panel/Database/$DB/manage_pack
PDATA=days:float=$DAYS

echo "Zope [$DB] db packing...."
/usr/local/bin/wget -nv --http-user=$USER --http-passwd=$PASS --post-data '$PDATA' $URL
echo "Zope [$DB] db packing done."

んで叩いてみると、

[root@ns1 bin]# ./dbpack
Zope [main] db packing....
00:47:15 URL:http://localhost:xxxx/Control_Panel/Database/main/manage_main [6695/6695] -> "manage_main" [1]
Zope [main] db packing done.
[root@ns1 bin]#

おー動いた動いた。これで問題解決しました。・・・でも、連続でやると 500(Internal Server Error)が帰ってくるんですが・・・なんなんでしょ?(;´Д`) 取りあえず様子見ですかな。

 ちなみに、--post-data オプションに対応しているのは wget-1.9.1 以降のう゛ぁーじょんです。・・・えぇ、ヲレ環境(RH8・・・)では当然の如くそんな新しいものは入ってません(wget-1.8.2-5が入ってました)orz

 よって、こんな感じに入れ替えしてやってます。

[root@ns1 bin]# rpm -q --whatrequires wget
wget を必要とするパッケージは存在しません
[root@ns1 root]# rpm -e wget
[hoge@ns1 hoge]$ tar zxvf wget-1.10.tar.gz
[hoge@ns1 hoge]$ cd wget-1.10
[hoge@ns1 wget-1.10]$ ./configure
[hoge@ns1 wget-1.10]$ make
[root@ns1 wget-1.10]# make install
[root@ns1 wget-1.10]# which wget
/usr/local/bin/wget
[root@ns1 wget-1.10]#