WordPress (KUSANAGI : Nginx + HHVM 環境) でファイルがアップロードできない「ファイルが空のようです。」を解決

結論

HHVM の不具合。KUSANAGI 関係無ぇ。

経緯

KUSANAGI 環境で WordPress ライフを謳歌していたところ、突如以下のエラーが起きるように。

ファイルが空のようです。中身のあるファイルをアップロードしてください。このエラーは php.ini ファイルでアップロードができない設定になっているか、 post_max_size が upload_max_filesize よりも小さく設定されているために発生している可能性もあります。

続きを読む

EC-CUBEプラグインがインストールできない「解凍に失敗しました」の解消

管理画面から EC-CUBEプラグインをインストールしようとしても、「解凍に失敗しました」という旨のメッセージが出てインストールできない場合がある。

続きを読む

mailcatcher をインストールして PHP で使うまで

mailcatcher

「開発環境とかでメール送信テストしたいけど、実際に送信するのはちょっと・・・」*1

そんなときにこの MailCatcher

ダミーのSMTPサーバーと、そのWEBメールインターフェースを提供してくれる。詳細はぐぐって、どうぞ。

今回はこいつをインストールして PHP で使うまでをメモった。

インストール手順

Ruby gem の環境を作る

今回の例は CentOS + yum だが、各自お好きな方法でかまわない。rbenv とか。

# yum install ruby ruby-devel rubygems sqlite sqlite-devel
# gem install mailcatcher

PHPの設定変更

※php.ini直接でもいいけど
# vi /etc/php.d/mailcatcher.ini    

sendmail_path = "/usr/bin/env catchmail"

※WEBサーバー再起動
# /etc/init.d/httpd restart

mailcatcher起動

# mailcatcher

Vagrant等で使う場合、mailcatcher の WEBインターフェースを使うには明示的にIPアドレスを指定してやらないと都合が悪い。

# mailcatcher --http-ip 192.168.33.10

仕上げ

mailcatcher で使うポート(1080, 1025)を開ける。自分の環境に合った方法で。

【例:コマンドで直接変更する場合】
# iptables -A INPUT -p tcp --dport 1080 -j ACCEPT
# iptables -A INPUT -p tcp --dport 1025 -j ACCEPT
# /etc/init.d/iptables save
# /etc/init.d/iptables restart
【例:chef-cookbook iptables のテンプレートに追記する場合】
# mailcatcher
-A FWR -m tcp -p tcp --dport 1080 -j ACCEPT
-A FWR -m tcp -p tcp --dport 1025 -j ACCEPT

あとは、PHPアプリ側で使うメール送信ポートに 1025 (mailcatcherのデフォルト設定)を指定すれば OK 。

WEBインターフェースは

http://localhost:1080

にアクセス。またはIPアドレスを明示的に指定した場合は以下のようになる。

http://192.168.33.10:1080

以上

注意

mailcatcher コマンドを叩くたびに新しいプロセスで起動しちゃうので、オプションを指定しなおしたい時などは、プロセスを探して kill してから。

*1:2017-05-01 追記: 現在も結構参照されているこの記事ですが、今は mailtrap.io を使うのが簡単でオススメです。

EC-CUBE商品管理画面で商品種別のみ文字化けする

環境

事象

  • 商品登録画面において「商品種別」のラベルが「????」などに文字化けする。
  • DBには正常に登録されており、他のマスターデータは表示上の文字化け無し。
  • 管理画面のマスターデータ管理で mtb_product_type を見ると文字化け無し。

原因

商品種別マスターデータのキャッシュファイルがぶっ壊れてる(文字化けしてる)。

キャッシュファイルはただの配列をシリアライズしたものなので、エディタで見るとわかる。そこですでに「????」とかになってる。

解決方法

とにかく、当該のキャッシュを再生成させればよい。

方法 1. マスターデータキャッシュファイルを削除

/data/cache/mtb_product_type.serial を削除する。

方法 2. マスターデータ管理画面から再設定

ファイルを直接操作できず「方法 1」が適用できない場合はこちら。

  1. 管理画面「マスターデータ管理」で「mtb_product_type」を開く
  2. 値をいったんASCII文字に置き換えて登録。(「normal」とか「download」とかに。)
  3. 再度、管理画面「マスターデータ管理」で「mtb_product_type」を開く
  4. 値を元に戻す。

根本的な原因は追えてないけど、EC-CUBEに深く関わりたくはないのでこれでおしまい。:P

vagrant up に失敗するよくあるケース

Pageant が起動している

終了させてから vagrant up しよう。

Vagrantと仮想マシンとの紐づけが外れないようにするには

以前書いた以下の記事。

Vagrantの仮想マシンとの紐付けの直し方

そもそもそれを防止するにはどうするのよ?というお話。

力 is Power

仮想マシンとの紐づけが定義されている以下のファイルを「読み取り専用」にしてしまうという力技。

/path/to/.vagrant/machines/default/virtualbox/id

こうすると、もし紐づけの削除が行われそうになった時には

$ vagrant up
(中略)
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.2.7/lib/vagrant/machine.rb:204:in `initialize': Permission denied

ってな感じに起動でコケるので、結果的に紐づけ削除を防止できる。そのあとは再度 vagrant up すればOK。

今のところこれで不都合は起きていない。

根本的な問題解消方法は未だ不明。

Vagrantの仮想マシンとの紐付けの直し方

何かの拍子でVagrantと既存の仮想マシンとの紐付けが削除されて、vagrant up実行時に新たな仮想マシンを作成してしまうことがあります。
Vagrantの仮想マシンとの紐付けの直し方 - Lyrical Magical

2015-02-26 追記:現在、上記記事のリンクは切れています。

たまによくあるよね。

続きを読む