CakePHPをPostgreSQLに接続させるため、database.phpを編集してブラウザからCakePHPの画面を見ると
Cake is NOT able to connect to the database.
のメッセージが出力され接続できない場合のいくつかの原因を紹介します。
使用環境は以下の通りです。
全て同一サーバー内で動作していることを前提とします。
以下 db.just4fun.biz の記事です。
以下 linux.just4fun.biz の記事です。
CakePHPに設定したPostgreSQL用のdatabase.phpを以下に記します。 $ cat app/config/database.php
?php class DATABASE_CONFIG {
var $default = array(
'driver' => 'postgres',
'connect' => 'pg_connect',
'host' => 'localhost',
'login' => 'sakura',
'password' => '*********',
'database' => 'sakuradb',
'encoding' =>'utf-8',
'prefix' => '');
}
PostgreSQLのpg_hba.confの設定を見直してみます。
以下、pg_hba.confの抜粋です。
METHODのところをtrustにし、ローカルドメインソケット、localhost(127.0.0.1)、IPv6の::1を全てtrustにしました。
これにより、ローカルサーバー内においてパスワードが不要になり接続できます。
# TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust
pg_hba.confを上記に記した変更(trustに変更)し、PostgreSQLを再起動しブラウザからCakePHPに接続するとブラウザに以下のように表示されれば正常に接続されました。
Cake is able to connect to the database.
リッスンアドレスやポートの設定に問題は無いでしょうか?
以下、修正前のpostgresql.confの抜粋です。
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
#port = 5432 # (change requires restart)
本設定については、「PostgreSQLでIPv6のリッスンを無効にしたい場合の対処」を参考にしてください。
hostsファイル内のlocalhostやサーバーのホスト名に設定の誤りはないでしょうか?
以下、当方の環境のhostsファイルです。
# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
iptablesの設定によりPostgreSQLへ接続できないようになっていないでしょうか?
以下の記事へのリンクはApacheのポート公開になっていがPostgreSQLのポート公開にも役に立つと思います。
ApacheからのPostgreSQLアクセスでSELinuxが動作し接続できない可能性があります。
以下の記事を参考にSELinuxを停止または無効化してみてください。
以上、CakePHPからPostgreSQLに接続できない原因をいくつかあげてみました。