麻烦将我的本地Wordpress安装隧道传输到appfog上的mysql数据库

时间:2012-11-04 17:01:59

标签: mysql wordpress mamp appfog

我在appfog上设置了wordpress安装(使用rackspace),并将安装克隆到我的本地机器进行开发。我知道安装工作(使用MAMP),因为我创建了一个本地mysql数据库并更改了wp-config.php指向它。但是,我希望在每次提交时都不必更改wp-config.php。在做了一些研究后,似乎Appfog服务Caldecott允许我使用af tunnel隧道进入服务器上的mysql数据库。不幸的是,我遇到了让它运转的问题。即使我将我的MAMP mysql端口更改为8889,并通过端口3306隧道mysql,它看起来已经连接但是在加载我的localhost Wordpress时仍然会出现“建立数据库连接时出错”。当我退出mysql监视器(使用ctrl+x, ctrl+c)时,我收到一条消息,指出“错误:'mysql'执行失败;它是否在你的$ PATH中?'。原来,不,不是,但是我'我在我的本地机器上修复了我的PATH变量,这样当我进入终端并输入mysql时,它就会加载。

所以我猜我的问题是两部分:

1.)我是否在本地机器上使用正确的Wordpress开发方法



2.)如果是这样,为什么隧道不工作?

3 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是使用本地数据库设置模拟本地系统上的VCAP_SERVICES环境变量。这将允许您使用相同的自定义AppFog wp-config.php文件,该文件查看VCAP_SERVICES以获取其数据库信用。

export VCAP_SERVICES='{"mysql-5.1": [{"credentials": {                      
    "hostname": "localhost",          
    "port": 3306,            
    "password": "root",            
    "name": "LOCAL_DATABASE_NAME",            
    "user": "root"}}]}'

编辑:设置此env var后,您需要在MAMP中重新启动Apache服务器。 (谢谢Dex)

这将消除将开发代码指向生产数据库的需要。

答案 1 :(得分:1)

只测试vcap_services是否可用。如果是,请使用一个配置。如果他们不是,请使用不同的配置。

这是我本地+ appfog开发网站配置文件的一个示例。

  

if(getenv("VCAP_SERVICES")){
    //if in webserver
    $services_json = json_decode(getenv("VCAP_SERVICES"),true);
    $mysql_config = $services_json["mysql-5.1"][0]["credentials"];
    $username = $mysql_config["username"];
    $password = $mysql_config["password"];
    $hostname = $mysql_config["hostname"];
    $port = $mysql_config["port"];
    $db = $mysql_config["name"];

    define("DB_SERVER", "$hostname");
    define("DB_USER", "$username");//enter your database username
    define("DB_PASS", "$password");//databse password
    define("DB_NAME", "$db");//database name
} else {
     //if in local development
     define("DB_SERVER", "localhost");
     define("DB_USER", "website");//enter your database username
     define("DB_PASS", "dfgdfgdf");//databse password
     define("DB_NAME", "fgdf_web");//database name
}

另外,您可以使用.afignore,使用.gitignore忽略af更新功能中的某些文件。您可以使用适当的配置更新一次,然后添加afignore,然后它将永远不会再次更新。

答案 2 :(得分:0)

这是一个快速的非常脏脚本,可以根据Tim Santeford的答案自动执行该过程。请务必更改LOCAL_DATABASE_NAME

#!/bin/bash

export VCAP_SERVICES='{"mysql-5.1": [{"credentials": {"hostname": "localhost", "port": 8889, "password": "root", "name": "LOCAL_DATABASE_NAME", "user": "root"}}]}'

/Applications/MAMP/Library/bin/httpd -k stop

sleep 3

/Applications/MAMP/Library/bin/httpd -k start