谷歌应用引擎:如何使用Zend DB连接到云SQL


Google App Engine: How to connect to Cloud SQL with Zend DB

我有一个Zend Framework 1.12应用程序,它使用Zend DB Adapter类来连接MySql。我需要尽快部署它,并正在调查谷歌应用引擎。

我目前的问题是无法将应用程序连接到Google Cloud SQL。这个谷歌页面,https://developers.google.com/appengine/docs/php/cloud-sql/,给出了一个使用PHP和PDO的例子。它使用DSN作为参数。

Zend DB Adapter类不将DSN作为参数,而是根据它接收的其他参数构造它。我已经尝试过设计Zend DB适配器参数来提供正确的DSN,但仍然没有成功。这是我的尝试:

$config = new Zend_Config(
    array(
        'database' => array(
            'adapter' => 'Pdo_Mysql',
            'params'  => array(
                'host'     => 'test-instance',
                'dbname'   => 'my_db_name',
                'username' => 'root',
                'password' => 'rootpassword',
                'charset'  => 'utf8',
                'driver_options'  => [
                    'unix_socket' => '/cloudsql/test-project'
                ]
            )
        )
    )
);
try {
    $this->_db = Zend_Db::factory($config->database);
    $this->_db->getConnection();
} catch (Exception $e){    
    Zend_Registry::get('logger')->debug('Cannot create the connection...');
    Zend_Registry::get('logger')->debug(print_r($e, true));
}

消息中的异常是

mysql驱动程序当前未安装

有什么想法吗?

在这个阶段,我只是在桌面上的GAE SDK中尝试它。我还没有将应用程序上传到云端。不过,我怀疑这是问题所在。(我的工作站IP被授权使用Cloud Sql实例)。

我自己没有将Zend Framework与AppEngine一起使用过,但根据我的经验(我在任何地方都没有发现它的文档),如果您使用"root"用户从AppEngine应用程序连接到Cloud SQL,则不应提供密码,否则它将无法连接。

同样如文档中所示(此处:https://developers.google.com/appengine/docs/php/cloud-sql/#PHP_Connecting_to_your_Cloud_SQL_instance),unix_socket选项的格式应为/cloudsql/project-name:instance-name

因此,我会尝试将您的$config重写如下:

$config = new Zend_Config(
    array(
        'database' => array(
            'adapter' => 'Pdo_Mysql',
            'params'  => array(
                'host'     => '',
                'dbname'   => 'my_db_name',
                'username' => 'root',
                'password' => '',
                'charset'  => 'utf8',
                'driver_options'  => [
                    'unix_socket' => '/cloudsql/test-project:test-instance'
                ]
            )
        )
    )
);