MENU

blog
スタッフブログ

dot
【EC-CUBE4.0】 プラグインのアップデートができない
技術

【EC-CUBE4.0】 プラグインのアップデートができない

みなさんこんにちは。
ソリューションSecの長谷川です。

先日EC-CUBEのプラグインをアップデートしようとしたところ、エラーが発生してしまいました。
その後、色々調べてアップデートできるようになったので、その時に対応した内容を記録しておこうと思います。

503 Service Temporarily Unavailable

まず1つ目のエラーは「503 Service Temporarily Unavailable」です。
EC-CUBEのプラグインアップデート時に表示されるモーダルウィンドウのログを確認すると、下記のような出力があります。

**************** Disable ****************
**************** Upgrade ****************
<HTML>
<HEAD>
<TITLE>503 Service Temporarily Unavailable</TITLE>
<BASE href="/error_docs/"><!--[if lte IE 6]></BASE><![endif]-->
</HEAD>
<BODY>
<H1>Service Temporarily Unavailable</H1>
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.<P>
<HR>
<ADDRESS>
Web Server at localhost.localdomain
</ADDRESS>
</BODY>
</HTML>

<!--
- Unfortunately, Microsoft has added a clever new
- "feature" to Internet Explorer. If the text of
- an error's message is "too small", specifically
- less than 512 bytes, Internet Explorer returns
- its own error message. You can turn that off,
- but it's pretty tricky to find switch called
- "smart error messages". That means, of course,
- that short error messages are censored by default.
- IIS always returns error messages that are long
- enough to make Internet Explorer happy. The
- workaround is pretty simple: pad the error
- message with a big comment like this to push it
- over the five hundred and twelve bytes minimum.
- Of course, that's exactly what you're reading
- right now.
-->

プラグインの配信サーバーのエラーとかのように思うかもしれませんが
Apacheのエラーログを見てみると、「Connection reset by peer ~~~」というエラーが出ています。

このエラーは接続相手が強制的に切断したことを意味するエラーになりますが
PHPで実行時間の制限がされており、かつこの制限時間に引っかかった場合も同様のエラーが出ます。
ですので、PHPの設定を変更します。

max_execution_time = 3600 ← デフォルトは30秒になっているので3600秒にしました

Allowed memory size of 1610612736 bytes exhausted

次のエラーはメモリエラーです。
EC-CUBEのプラグインアップデート時に表示されるモーダルウィンドウのログでは、下記だけが出力されています。

**************** Disable ****************
**************** Upgrade ****************

何もエラー情報がないので、ログを見てみると下記のエラーが出力されていました。

PHP message: PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in ~~~

1,610,612,736bytes=1.5GBなので相当のメモリを消費したことになります。

正直、1.5GBも消費すること自体どうなんだというのはありますが
仕方がないので対応するしかありません。

EC-CUBE4系統はプラグインの管理はComposerが利用されています。
なので、このComposerがメモリをもっと消費できるように設定してあげなければなりません。

ネットを見るとComposerのメモリ制限を変えるならphp.iniのmemory_limitを変更したり
コマンドで実行するなら下記のようにすると良いという記述が出てきます。

COMPOSER_MEMORY_LIMIT=-1 composer update

しかし、これらの設定を試してみても同じエラーがでました。
というか、php.iniのメモリリミットを8GBにしても1.5GBでエラーが出ます。

なので、EC-CUBEのソースコードなどを調べているとconfigに下記のパラメータがありました。

eccube_composer_memory_limit: 1536M

どうもここでcomposerのメモリ制限を1.5GBに強制しているようです。
なので、ここの値を上げてあげれば、メモリ制限を変更できます。

最後に

EC-CUBEのプラグインアップデートでメモリをこんなに使われることがレアケースのためか
2個目のメモリに関する対策方法は検索しても出てきませんでした。

色々ソースコードを解析して、やっとたどり着いたわけですが
もし同じ症状で困っている人がいれば、その助けになると幸いです。

それでは今回はこのへんで。

dot
dot
PAGETOP