Google App Engine上的我的CodeIgniter应用无法连接到Google Cloud SQL上的数据库。我尝试了很多东西。
我检查了mysql数据库中的用户,我的用户拥有所有权限。我检查了所有拼写,这是正确的。该应用程序在本地工作。我如何修复此问题?我无法让它连接起来。
答案 0 :(得分:7)
开箱即用CodeIgniter不会连接到Google Cloud SQL实例,因此需要修改CI数据库驱动程序文件,这是因为CI希望它可以选择连接到localhost或远程tcpip主机,开发人员从未预料到任何人都希望直接连接到套接字。
出于性能原因,我选择使用Mysqli驱动程序而不是Mysql,以下是我的工作方式:
步骤1)编辑codeigniter / system / database / drivers / mysqli / mysqli_driver.php文件,并使用以下代码替换db_connect函数:
function db_connect()
{
if(isset($this->socket)){
return mysqli_connect(null, $this->username, null, $this->database, null, $this->socket);
}
elseif ($this->port != ”)
{
return mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
}
else
{
return mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
}
}
步骤2)更改应用程序的config / database.php(或要声明数据库设置的wherver) - 根据您的应用程序,您可以选择将“database”添加到yourapp / config / autoload中的自动加载阵列。 php或者您可以选择手动调用load-> database()函数。这假定您的应用程序名称是“myappname”。适当地替换APPENGINE-ID和DATABASE-INSTANCE-ID和YOUR_DATABASE_NAME。
$db[‘myappname’][‘hostname’] = ‘localhost’;
$db[‘myappname’][‘username’] = ‘root’;
$db[‘myappname’][‘password’] = null;
$db[‘myappname’][‘database’] = ‘YOUR_DATABASE_NAME’;
$db[‘myappname’][‘dbdriver’] = ‘mysqli’;
$db[‘myappname’][‘pconnect’] = FALSE;
$db[‘myappname’][‘dbprefix’] = ‘’;
$db[‘myappname’][‘swap_pre’] = ‘’;
$db[‘myappname’][‘db_debug’] = FALSE;
$db[‘myappname’][‘cache_on’] = FALSE;
$db[‘myappname’][‘autoinit’] = FALSE;
$db[‘myappname’][‘char_set’] = ‘utf8’;
$db[‘myappname’][‘dbcollat’] = ‘utf8_general_ci’;
$db[‘myappname’][‘cachedir’] = ”;
$db[‘myappname’][‘socket’] = ‘/cloudsql/APPENGINE-ID:DATABASE-INSTANCE-ID’;
Viola,您的CodeIgniter应用程序现在应该可以连接并与您的Google Cloud MySQL数据库通信了!
现在,如果你想真正想要并启用数据库缓存,可以更改CI代码以使用memcache(最快)或Google Cloud Storage(更有保证的持久性),但我不会在此博客中介绍...
通过http://arlogilbert.com/post/67855755252/how-to-connect-a-codeigniter-project-to-google-cloud提供答案
答案 1 :(得分:0)
您是否已授权您的appengine应用程序访问Cloud SQL实例?转到实例的控制台上的访问控制面板(在https://cloud.google.com/console#/project/ {project name} / sql / instances / {instance name} / access-control)。寻找授权的应用引擎应用程序。
否则,如果您成功连接到实例,则必须从代码或配置中选择数据库(取决于应用程序)。例如,从“运行wordpress”指南(https://developers.google.com/appengine/articles/wordpress),您必须定义DB_NAME。如果您在自己的代码中处理连接,则需要使用mysql_select_db。
从略读codeigniter文档,看起来你需要像: $ config ['database'] =“mydatabase”;
我不熟悉这个框架,所以请自己查看文档(http://ellislab.com/codeigniter/user-guide/database/configuration.html)。