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

Posted

技术标签:

【中文标题】无法将我的本地 Wordpress 安装隧道传输到 appfog 上的 mysql 数据库【英文标题】:Trouble tunneling my local Wordpress install to the mysql database on appfog 【发布时间】:2012-10-24 14:51:19 【问题描述】:

我在 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 时,它就会加载。

所以我想我的问题是 2 个部分:1.) 我是否采用正确的方法在本地计算机上进行 Wordpress 开发 和 2.)如果是,为什么隧道不工作?

【问题讨论】:

好吧,我还没有遇到每个人都喜欢的 CMS,我们正在工作中启动 Drupal,所以我也想获得 wordpress 的经验。 @davidkonrad 我同意,但是有很多 3rd 方插件值得一试学习。我希望它是用 RoR 写的。 【参考方案1】:

解决此问题的一种方法是使用本地数据库设置模拟本地系统上的 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"]'

编辑:设置此环境变量后,您需要在 MAMP 中重新启动 Apache 服务器。 (感谢德克斯)

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

【讨论】:

无法弄清楚如何让 MAMP GUI 识别 VCAP_SERVICES 变量。所以在它启动后,我从终端手动调用/Applications/MAMP/Library/bin/httpd -k stop && /Applications/MAMP/Library/bin/httpd -k start 另外,默认情况下,对于 MAMP,主机名应为 localhost,用户/密码均为 root 你能更详细地解释一下这是做什么的吗?它是否告诉本地数据库从服务器上的数据库复制内容? (你的意思是LOCAL_DATABASE_NAME 我必须在我的本地机器上创建一个空数据库来路由,对吗?)我如何检查我的VCAP_SERVICES 变量保存在其中的内容?当我执行emacs VCAP_SERVICES 之类的操作时,那里似乎什么都没有。 不,这不会从服务器复制数据库。您必须创建一个本地数据库并使用数据库名称配置 LOCAL_DATABASE_NAME。本地数据库仅用于在更新生产应用程序之前进行本地测试。如果您想使用示例数据进行开发,您可以复制您的生产数据库并将其导入本地。要检查您的本地 VCAP_SERVICES var,请使用 cmd:echo $VCAP_SERVICES。如果你还没有导出任何东西,你应该得到空字符串。 您可以使用 phpMyAdmin (PMA) jumpstart AF 提供,然后将您的 wordpress 数据库绑定到它。然后使用 PMA 导出数据库。【参考方案2】:

这是一个快速且非常脏的脚本,用于根据 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

【讨论】:

【参考方案3】:

只需测试 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

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

【讨论】:

以上是关于无法将我的本地 Wordpress 安装隧道传输到 appfog 上的 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 链接将我引导至 wamp 服务器配置页面(本地主机)

为啥在通过 ngrok 进行隧道传输时会出现 CORS 错误?

markdown 使用Ngrok将您的本地工作隧道传输到互联网

新页面将我发送到存档页面 - Wordpress

无法将 WordPress 备份从实时安装到本地

无法将我的 WordPress 帖子与我在 Facebook 上的图片分享