postgresを利用してテスト環境を構築することになった時のお話です。
バックアップやリストが簡単なこともあって、1から構築を依頼された時はmysqlをオススメしていますが、既に構築済のお客様の中にはpostgresという場合も多々あります。お客様にテスト環境をご用意いただけない事もあるので、LAMPのテストサーバーにpostgresのインストールをすることになりました。
そこで罠にハマりました。
今回早急に対応しなければならなかったお客様がなんとEC-CUBE2.4!私は動いている2.4を初めてみたのですが、相方さんはそうでもないらしく、「懐かしいー!!!」と大ハシャギしていました。
動いているものが古くてもやることは変わらないです。
本番サーバーからソースを取得してテスト環境に反映!DBからdumpしてsqlファイルも取得!!
私達のテスト環境は模範的LAMP環境でpostgresが入っていななかったので、インストールと初期設定。
下記サイトを参考にしました。
CentOS 6 – PostgreSQL – インストール : Server World
お客様の本番環境と同じIDとパスワードを作成し、同じ名称のデータベースを作成。権限も同じ状態にし、いざ表示!!!
真っ白!!!
えー・・・・、DBのユーザー名もあってる・・・
パスワードもデータベース名もあってる・・・
ホストもあってる・・・
ターミナルからの「psql -h 127.0.0.1 -U username -d データベース名」で接続できてる・・・
(この時、「ident認証に失敗しました」が出る問題にぶち当たったのですが、今回とは別なのでまた別の記事にします!)
エラーログを見ると…
PHP Fatal error: Call to undefined method DB_Error::getCol() in /xxx/xxx/data/class/SC_DbConn.php on line 139
この139行目は、こんな内容です。
$result = $this->conn->getCol($n, $col);
つまり、この「$this->conn」のオブジェクトにgetCol関数がないよと言っているようです。
$this->connをvar_dumpしてみるとことにしました。
すると…
DB Error: extension not found
なるerrorが出ていました。「エクステンションがない」と言っています。
。。。はっ!!!そうですよね!!!
PHPからpostgresに接続する時には、extensionがないとダメでした。
そうでしたそうでした。<(‘-‘;)
ここまで分かれば早いですね!
1. yumでさくっとPHPのpostgres接続のためのモジュールをインストール
yum install php-pgsql
2.モジュールファイルの場所をチェック
/usr/lib/php/modules/pgsql.soだったり、/usr/lib64/php/modules/pgsql.soだったり。
バージョンや環境によって若干違いますがfindするとさくっと見つかります。
find / -name pgsql.so
3.php.iniに設定する
php.iniにextensionを設定します。
vi /etc/php.ini
extension_dir=”/usr/lib64/php/modules”
extension=pgsql.so
extension_dirがすでに設定されている時は、手順2で探したsoファイルを、記載済のextension_dirにコピーするといいです。
4.Apacheの再起動
再起動したらphp.iniも反映されるはずですね!
service httpd restart
ドキドキしながら再度アクセスしてみると…ちゃんと表示されていました!よかったー。
これまでmysqlのみだったのにpostgresが必要になった時に、extensionは忘れがちです。
ログイン情報があってるのに、という場合は、サーバー環境もチェックしてみましょう!