无法将我的本地 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 错误?