PHPエラー「Class 'Normalizer' not found」の解決
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」が適用できない場合はこちら。
- 管理画面「マスターデータ管理」で「mtb_product_type」を開く
- 値をいったんASCII文字に置き換えて登録。(「normal」とか「download」とかに。)
- 再度、管理画面「マスターデータ管理」で「mtb_product_type」を開く
- 値を元に戻す。
根本的な原因は追えてないけど、EC-CUBEに深く関わりたくはないのでこれでおしまい。:P
vagrant up に失敗するよくあるケース
Pageant が起動している
終了させてから vagrant up
しよう。
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。
今のところこれで不都合は起きていない。
根本的な問題解消方法は未だ不明。