#navi(../)
* CakePHPがPostgreSQLに接続できない場合の原因をいくつか紹介 [#j770d4eb]
CakePHPをPostgreSQLに接続させるため、database.phpを編集してブラウザからCakePHPの画面を見ると
Cake is NOT able to connect to the database.
のメッセージが出力され接続できない場合のいくつかの原因を紹介します。
#contents
#htmlinsertpcsp(web-top.html,web-sp.html)
* 使用環境 [#d43bc167]
使用環境は以下の通りです。~
全て同一サーバー内で動作していることを前提とします。
- OS~
CentOS 6
- PHP~
PHP 5.3.3
- Apache~
Apache/2.2.15 (Unix)
- CakePHP~
CakePHP 1.3.14
* 参考資料 [#hd3901c1]
以下 [[db.just4fun.biz>http://db.just4fun.biz]] の記事です。
-[[psqlコマンドでlocalhostを指定すると接続できない場合の対処方法>http://db.just4fun.biz/PostgreSQL/localhost%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%A8%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95.html]]
-[[PostgreSQLでIPv6のリッスンを無効にしたい場合の対処>http://db.just4fun.biz/PostgreSQL/PostgreSQL%E3%81%A7IPv6%E3%81%AE%E3%83%AA%E3%83%83%E3%82%B9%E3%83%B3%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6.html]]
以下 [[linux.just4fun.biz>http://linux.just4fun.biz]] の記事です。
-[[CentOSでhttpdを動かしたのに外部PCから見れない場合の設定>http://linux.just4fun.biz/CentOS/httpd%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%9F%E3%81%AE%E3%81%AB%E5%A4%96%E9%83%A8PC%E3%81%8B%E3%82%89%E8%A6%8B%E3%82%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E8%A8%AD%E5%AE%9A.html]]
-[[CentOSでSELinux動作モード確認・動作モードの設定>http://linux.just4fun.biz/CentOS/SELinux%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%E7%A2%BA%E8%AA%8D%E3%83%BB%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E8%A8%AD%E5%AE%9A.html]]
* CakePHPで設定したdatabase.php [#p41578d3]
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 [#ae665f2f]
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側の設定調査・postgresql.conf [#r55f1a64]
リッスンアドレスやポートの設定に問題は無いでしょうか?~
以下、修正前の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のリッスンを無効にしたい場合の対処>http://db.just4fun.biz/PostgreSQL/PostgreSQL%E3%81%A7IPv6%E3%81%AE%E3%83%AA%E3%83%83%E3%82%B9%E3%83%B3%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6.html]]」を参考にしてください。
* /etc/hostsに問題はないでしょうか? [#h8ff1335]
hostsファイル内のlocalhostやサーバーのホスト名に設定の誤りはないでしょうか?~
以下、当方の環境のhostsファイルです。
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
* iptablesの設定に問題はないでしょうか? [#kb2aa2fc]
iptablesの設定によりPostgreSQLへ接続できないようになっていないでしょうか?~
以下の記事へのリンクはApacheのポート公開になっていがPostgreSQLのポート公開にも役に立つと思います。
-[[CentOSでhttpdを動かしたのに外部PCから見れない場合の設定>http://linux.just4fun.biz/CentOS/httpd%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%9F%E3%81%AE%E3%81%AB%E5%A4%96%E9%83%A8PC%E3%81%8B%E3%82%89%E8%A6%8B%E3%82%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E8%A8%AD%E5%AE%9A.html]]
* SELinuxが動作していませんか? [#b9c5ffda]
ApacheからのPostgreSQLアクセスでSELinuxが動作し接続できない可能性があります。~
以下の記事を参考にSELinuxを停止または無効化してみてください。
-[[CentOSでSELinux動作モード確認・動作モードの設定>http://linux.just4fun.biz/CentOS/SELinux%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%E7%A2%BA%E8%AA%8D%E3%83%BB%E5%8B%95%E4%BD%9C%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E8%A8%AD%E5%AE%9A.html]]
以上、CakePHPからPostgreSQLに接続できない原因をいくつかあげてみました。
#htmlinsertpcsp(web-btm.html,web-sp.html)