このエントリーをはてなブックマークに追加


CakePHPがPostgreSQLに接続できない場合の原因をいくつか紹介

CakePHPをPostgreSQLに接続させるため、database.phpを編集してブラウザからCakePHPの画面を見ると

Cake is NOT able to connect to the database.

のメッセージが出力され接続できない場合のいくつかの原因を紹介します。


スポンサーリンク

使用環境

使用環境は以下の通りです。
全て同一サーバー内で動作していることを前提とします。

  • OS
    CentOS 6
  • PHP
    PHP 5.3.3
  • Apache
    Apache/2.2.15 (Unix)
  • CakePHP
    CakePHP 1.3.14

参考資料

以下 db.just4fun.biz の記事です。

以下 linux.just4fun.biz の記事です。

CakePHPで設定したdatabase.php

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

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

リッスンアドレスやポートの設定に問題は無いでしょうか?
以下、修正前の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のリッスンを無効にしたい場合の対処」を参考にしてください。

/etc/hostsに問題はないでしょうか?

hostsファイル内のlocalhostやサーバーのホスト名に設定の誤りはないでしょうか?
以下、当方の環境のhostsファイルです。

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

iptablesの設定に問題はないでしょうか?

iptablesの設定によりPostgreSQLへ接続できないようになっていないでしょうか?
以下の記事へのリンクはApacheのポート公開になっていがPostgreSQLのポート公開にも役に立つと思います。

SELinuxが動作していませんか?

ApacheからのPostgreSQLアクセスでSELinuxが動作し接続できない可能性があります。
以下の記事を参考にSELinuxを停止または無効化してみてください。

以上、CakePHPからPostgreSQLに接続できない原因をいくつかあげてみました。


スポンサーリンク

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:36:00