【EC-CUBE】商品一括アップロードでの「Internal Server Error」

medium_79775592
photo credit: *MarS via photopin cc

またしても躓いたので備忘録としてメモしておこうと思います。

今回はEC-CUBEの商品一括アップロードでのエラーについて。

CSVファイルをアップロード!だが、断られる!

EC-CUBEの商品一括登録ではCSVファイルを読み込ませて商品を登録します。

そこで遭遇する主なエラーとしては

  • CSVファイルのアップロードエラー
  • Internal Server Error
  • システムエラー

この辺りになるかと思うのですが、これがなかなか・・・。

CSVファイルのアップロードエラー

基本的な事で言うとアップロードフォルダのパーミッションに書き込み権限が無いとか。

インストール時にチェックされるからそんな事無いかなとか思いつつ、どこかでフォルダを作り直してたりするとあり得る話です。

あとはアップロード出来るファイルサイズが足りない場合。

この場合はサーバー側のphp.iniでの設定もそうですが「システム設定>パラメーター設定」での「CSV_SIZE」の値もチェックしましょう。

screenshot_48

Internal Server Errorがでる

ここが一番厄介・・・。

こちらのページが大変参考になりました。

またEC-CUBE。商品アップロード時のInternal Server Error|やっぱりscratchだろう。 IT会社社長のクリエイティブBlog

※上記のリンク、リンク先が表示できないのでInternetArchiveのリンクにしております。

まずは「mod_fcgid: read data timeout in 40 seconds, referer:」このエラー。

サーバーに依るのだろうけど、FastCGIのモジュールを使用していることでそこでタイムアウトになってエラーになってた様です。

おかしいと思ってはいたんですがね・・・php.iniでタイムアウトの時間伸ばしても効かないし。

FastCGIなんて使ってないけどなぁ・・・とか思っていたらバッチリ使っていたというオチ。

サーバー側のhttpd.conf弄れるのであれば

IPCCommTimeout 300

を設定してあげてタイムアウト時間を延ばせるとの事ですが、今回は触れなかったのでコントロールパネルからFasrCGIをOFFにしました。

必要であれば一括登録が終わってから戻せば良いし。

次に「Premature end of script headers: upload_csv.php, referer:」こっちのエラー。

phpでのタイムアウトよりもApacheのタイムアウトが早いときに出るらしい。

ここに関してはApacheのタイムアウト設定が弄れたので長めにして調整。これも終わったら戻しておこうか・・・。

これでCSVで取り込めるようにはなったけど、実質FastCGIのくだりで解決してるかと思います。

何がそんなにハマったかというと、取り込めたり取り込めなかったりとよく分からない動作になったからなのですが、先ほどのページに書かれていた文章で納得しました。

1行でもアップできなくなったのは、永続化したプロセスが動きっぱなしになって、プールしてるプロセスがいっぱいになってwaitかかったとか、もしくはメモリ食いつぶしちゃって云々か。。

まさにこれだった模様。

システムエラーが出る

システムエラーについては色々試すとかデータ見直すっていう事にしかならないのだけど、ハマり所としてはデータ移行等の場面でオートインクリメントの番号が被る様な場合。

登録されてあるアイテムにオートインクリメント番号が既に付けられていた場合に重複してしまうのでエラーになります。

この場合、「dtb_products_product_id_seq」テーブルを見て数字を調整してあげると良いです。

商品情報だけで無く、カテゴリーやメーカー情報でも同じように調整出来ます。

とりとめのないまとめ

色々している内になんでこんな作りなんだろう?とおもう部分がチラホラ出てきますね、EC-CUBE。

無料で使えるわけだからそこは自分でどうにかしろって事なのでしょうけど、一筋縄ではいかない印象。

商品一括登録ってどんなカートでもクセ有るのでどういう形式だと楽かっていう事は分からないですが・・・個人的には慣れてる分楽天やYahooの一括登録の方が使いやすいです^^

が、Amazonさん・・・・あなたはちょっと使いづらいですw