パッケージインストール失敗時の挙動について

2014年3月14日 at 15:02

パッケージインストール失敗時の挙動がおかしいので報告します。

現象:
パッケージのインストールに失敗すると、マーケットプレイスと通信不能になる。

解決方法:
データベース内のテーブルblocksにbtCachedBlockRecordがNULLの行が追加されるので、それを削除する。

修正方法:
内部の挙動が不明なので分かりませんが、ブロックのインストール失敗時、blocksテーブルにのこったゴミを削除するように修正すべきと思います。

詳しい状況:
パッケージ開発の練習台として開発した、空のブロック(basic_testのようなもの)二つを含むパッケージをインストールしたところ、二つ目のブロックのインストール時、エラーとなりました。どうやら、/package/blocksの下ではなく、/concrete/blocks以下を探して失敗した様子です。このあたりConcrete5の挙動がまだわかっていないので、どうなっているのかわかりませんが、真っ白の画面に、PHPのトレースのみが二行表示されるという感じでした。

多分、存在しないパス(ブロック名)を指定してインストールを失敗させると同様の共同になると思われます。ほかに、踏んでいる人がいないようなので報告しました(まあ、こちらのパッケージがおかしかったのだと思いますが、インストールに失敗しただけで、マーケットプレイスに接続できなくなるという不可思議な現象だったので、念のため報告します。

タグ:

Re: パッケージインストール失敗時の挙動について

2014年3月15日 at 10:24
ご報告有り難うございます!

ちょっと、そのテストパッケージの詳しい構成内容を教えて頂けますでしょうか。
 

Re: パッケージインストール失敗時の挙動について

2014年3月17日 at 16:46
ソースは出せないのですが、再現方法はわかっています。パッケージ自体の内容は、不具合と関係ありません。ここ→http://www.concrete5.org/documentation/developers/system/packages/ にあるような空のパッケージでもよいのでとりあえず用意してください。そのうえで、ブロックのクラス名を誤ったものに置き換えます。こちらで上記の現象が発生した際は、EstateThumbsBlockControllerとすべきところ、誤ってEstateThumbsControllerとしていたのが原因でインストールが失敗していました。問題は、失敗した際、blocksテーブルにおかしな行が書き込まれてしまうことです。インストールに失敗したブロックの記録が書き込まれてしまうので、修正したほうがいいかと^^;
 

Re: パッケージインストール失敗時の挙動について

2014年3月17日 at 16:50
追記です:もし、再現しなかった場合、同じ現象が発生するよう構成したパッケージを提供することも可能ですが、何分忙しいので、かなり後のことになると思います。多分、上の方法で再現すると思うので、試してもらえるとありがたいですm(_ _)m
 

Re: パッケージインストール失敗時の挙動について

2014年3月19日 at 6:52
ありがとうございます。

すいません、年度末の取り急ぎで・・・
ブロックのPHP宣言を間違えた時に不具合が起こるということと理解しました。

ブロックをインストールする時に、ブロックのコーディングが間違っていないか、チェック機能を加えるという、バグというより、開発者向けに新機能を加えて欲しいというような要望になるのかなと思います。

こちらでパッチを作れるか相談して、本家に送るか、本家で相談してみます。

ありがとうございます。
 

Re: パッケージインストール失敗時の挙動について

2014年3月19日 at 7:07
btCachedBlockRecordにnullが入ること自体は正常な挙動なので、それが原因ではないと思いますね。基本的には、パッケージ作者が正常にインストールできることを担保すべきですが、マーケットプレイスに接続できなくなったのもおそらく別の原因だと考えられます。