Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过隧道将本地Wordpress安装到appfog上的mysql数据库时出现问题_Mysql_Wordpress_Mamp_Appfog - Fatal编程技术网

通过隧道将本地Wordpress安装到appfog上的mysql数据库时出现问题

通过隧道将本地Wordpress安装到appfog上的mysql数据库时出现问题,mysql,wordpress,mamp,appfog,Mysql,Wordpress,Mamp,Appfog,我已经在appfog上安装了wordpress(使用rackspace),并将安装克隆到本地计算机上进行开发。我知道安装工作正常(使用MAMP),因为我创建了一个本地mysql数据库,并将wp-config.php更改为指向它。但是,我希望在每次提交时不必更改wp-config.php的情况下进行开发。在做了一些研究之后,似乎Appfog服务Caldecott允许我使用af tunnel在服务器上通过隧道进入mysql数据库。不幸的是,我在工作上遇到了问题。即使我将我的MAMP mysql端口更

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

所以我想我的问题有两部分:

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




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

处理此问题的一种方法是使用本地数据库设置在本地系统上模拟
VCAP_服务
环境变量。这将允许您使用查看VCAP_服务的相同自定义AppFog文件来获取其db凭据

export VCAP_SERVICES='{"mysql-5.1": [{"credentials": {                      
    "hostname": "localhost",          
    "port": 3306,            
    "password": "root",            
    "name": "LOCAL_DATABASE_NAME",            
    "user": "root"}}]}'
编辑:设置此env变量后,需要在MAMP中重新启动Apache服务器。(谢谢Dex)

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

下面是一个快速且非常脏的脚本,用于根据Tim Santeford的回答自动执行该过程。请确保更改本地数据库的名称

#!/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

只需测试vcap_服务是否可用。如果可用,请使用一种配置。如果不可用,请使用其他配置

下面是我的local+appfog开发网站配置文件的一个示例


另外,你也可以使用.afignore,就像使用.gitignore忽略af更新功能中的一些文件一样。你可以使用适当的配置更新一次,然后添加afignore,这样它就再也不会更新了。

我还没有遇到大家都喜欢的CMS,我们正在开始使用Drupal,所以我也想获得wordpress的经验。@davidkonrad我同意,但是有很多第三方插件值得一试。我希望它是用RoR编写的。我不知道如何让MAMP GUI识别VCAP_服务变量。所以在它启动后,我手动调用
/Applications/MAMP/Library/bin/httpd-k stop&&/Applications/MAMP/Library/bin/httpd-k start
从terminalAlso,默认情况下,MAMP的主机名应该是
localhost
,user/pass都是
root
。您能更详细地解释一下这是怎么做的吗?它是否告诉本地数据库从服务器上的数据库复制内容?(你指的是
LOCAL\u DATABASE\u NAME
,我必须在本地机器上创建一个空数据库才能路由通过,对吗?)如何检查我的
VCAP\u SERVICES
变量保存了什么?当我执行类似于
emacs VCAP\u SERVICES
的操作时,其中似乎没有任何内容。不,这不会从服务器复制数据库。您必须创建一个本地数据库,并使用数据库名称配置本地数据库名称。本地数据库仅用于测试loc在更新生产应用程序之前,请先进行关联。如果要使用示例数据进行开发,可以复制生产数据库并在本地导入。要检查本地VCAP_服务变量,请使用cmd:
echo$VCAP_服务
。如果尚未导出任何内容,则应获取空字符串。可以使用phpMyAdmin(PMA)jumpstart AF提供,然后将wordpress数据库绑定到它。然后使用PMA导出数据库。
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
}