最初に
[忙しい人向け] PHPフレームワークSlimを使ったアプリをHerokuで公開してみる
以前投稿した記事↑のようにherokuでslimを使えるようにして、
さらにmysql使えるようにして、DBにアクセスするコード書いたら、
エラーが出てハマったので 他の人向けに解決策をシェアします。
状況
lluminate/Eloquent使って、DBアクセスすると、↓のエラーが出る。
Slim Application Error
The application could not run because of the following error:
Details
Type: ErrorException
Code: 2
Message: call_user_func() expects parameter 1 to be a valid callback, function 'mb_strtolower' not found or invalid function name
File: /app/vendor/illuminate/support/Illuminate/Support/Pluralizer.php
Line: 234
Trace
# 0 [internal function]: Slim\Slim::handleErrors(2, 'call_user_func(...', '/app/vendor/ill...', 234, Array)
# 以下略
ぐぐってみた
phpでは、マルチバイト文字を正しく扱うために、php.iniをよしなに設定しないといけないのはわかっていたので、
そのあたりかな、、、とアタリをつけてぐぐってるとよさげな記事を発見。
を参考に、.user.ini
にmbstring周りの設定を追記したが、解決せず。。。
もう少しぐぐると、更に発見。
なるほど(^O^)
php.iniの設定ではなくて、マルチバイト文字まわりのライブラリを追加しないといけないのか。
修正コミット
以下の修正をいれて、herokuにpushで幸せになれます。
--- a/composer.json
+++ b/composer.json
@@ -5,7 +5,8 @@
"slim/extras": "2.0.*",
"twig/twig": "1.*",
"Respect/Validation" : "0.5.*",
- "illuminate/database" : "4.0.*"
+ "illuminate/database" : "4.0.*",
+ "ext-mbstring": "*"
},
"autoload": {
"psr-0": {"":"lib/"}
振り返ると、、、
mb_strtolower
というマルチバイト文字に関係するメソッドがない、というエラーメッセージから
「そういえばphpでマルチバイト文字列を使う時はうんたら、、、」
とかアタリが付けば一瞬で解決するのですが、
僕はそこに達するまで2時間位は、ああでもない、こうでもないとハマりました。
herokuではまだ色々ハマりそうorz