使用命令行进行自动化

此设置提供了极大的灵活性,并且使所有三个层在精确环境中运行以消除版本兼容性或配置差异的任何问题是有益的。由于代码在完全相同的堆栈上进行测试,因此没有理由将其用于一个层而不是另一个层。

但是有一个问题。开发人员通常会在本地环境中工作,这是他们在WP Engine环境之外发生的日常工作流程的一部分。问题在于,为了在两个环境之间同步数据,需要数据库导出/导入以及一些其他小的转换。

之前,我研究了如何配置WP-CLI别名以便使用SSH访问本地和远程服务器。在这篇文章中,我将使用命令行和WP-CLI解决如何将本地数据库同步到远程站点的难题。在这种情况下,远程站点是我在WP Engine上运行的WordPress的生产安装,我的本地安装是我用于在MacBook Pro上运行的开发环境。好的,让我们深入了解细节。

WP-CLI数据库命令

WP-CLI的一个功能是

1
wp db

启用数据库管理和管理。可以创建新数据库,删除表,修复数据库甚至运行已存储为文件的查询。您可以在WP-CLI文档中看到许多其他可用操作

该函数

1
wp db

可以采用其他命令来指定具体要执行的操作。典型的命令如下所示:

1
wp db optimize

。在这种情况下,我们要求WP-CLI优化数据库。WP-CLI命令很容易记住,因为它们始终以

1
wp

一个类似的函数开始,然后

1
db

将带有参数的命令。

对于我们的示例,我将使用

1
wp db export

1
wp db import

从生产服务器中获取数据库,然后将其导入我本地的开发环境。为了定位WordPress的特定远程实例,我在本地环境中设置了别名,这将允许我简单地定位远程服务器或本地WordPress实例。

导出数据库

我用于从生产服务器导出数据库的完整命令如下所示。

1
wp @prod db export -> prod.sql

指定我想在我的生产服务器上运行此WP-CLI命令,该服务器配置为别名。在此运行的实际命令是

1
wp @prod db export

将数据库导出到生产服务器上的本地文件,并将其命名

1
{dbname}-{Y-m-d}-{random-hash}.sql

为默认选项的格式。我的脚本将要求文件专门命名并下载到我的本地计算机,这就是为什么还有其他选项。该

1
->

选项允许在我的终端中将文件输出到标准输出。最后一个选项

1
prod.sql

允许输出存储在文件中而不是打印到屏幕上

获取实时网站URL

为了正确导入数据库,我们需要更改存储在wp_options表中的站点URL的选项。此更改允许我们的链接指向开发环境中的开发站点,而不是我们的生产站点。我们可以通过运行

1
wp option get

命令使用WP-CLI快速完成此操作。由于我们为生产设置了别名,我们可以使用它来远程进入我们的生产站点并获得’siteurl’的价值。完整命令如下所示:

1
wp @prod option get siteurl()

。本着自动化的精神,保存配置是有意义的,这样我们就可以使用它来更新我们的开发站点。我们可以通过将siteurl值存储在变量中来实现。完整命令如下所示:

1
prod_siteurl=$(wp @prod option get siteurl);

。然后,我们可以获取开发siteurl的值,以便将数据库导出中的siteurl更改为在开发站点上工作。这一切都看起来像下面的例子。从生产和开发中获取siteurl

1
2
prod_siteurl=$(wp @prod option get siteurl);
dev_siteurl=$(wp @dev option get siteurl);

搜索和替换

我们已经存储了生产和开发站点URL的值,以便在导出的数据库中运行搜索和替换操作以更新siteurl值。这可以通过运行命令来完成

1
wp search-replace prod_siteurl dev_siteurl

。由于我们已将siteurl值保存为变量,因此我们可以在命令中使用这些值并在开发服务器上执行它们。

在开发时搜索并替换siteurl值

1
wp @dev search-replace $prod_siteurl $dev_siteurl

关于导出的sql文件,我们有一些清理工作要做。由于我已经更新了数据库,因此无需保存,可以将其删除。
删除.sql文件

1
rm prod.sql

最后的步骤

下面的文本可以保存为本地计算机上的getdb.sh,并在更改权限以允许执行脚本后执行。您可以在命令行上使用chmod命令向脚本添加执行权限。

使用chmod命令执行权限

1
chmod +x getdb.sh

现在都在一起了

现在可以通过在保存脚本的目录中键入以下内容来运行该脚本。

执行脚本

1
./getdb.sh

完整的bash脚本,此脚本将获取生产数据库并导入到本地WordPress安装中。别名@prod和@dev用于简化命令。

从prod和dev获取siteurl

1
2
wp @prod db export - > prod.sql
wp @dev db import /srv/www/edmund/prod.sql

更新siteurl

1
2
3
wp @dev search-replace $prod_siteurl $dev_siteurl
#Remove .sql file
rm prod.sql

您还可以在Github上将此代码视为Gist。

结论

好的,这里介绍了很多东西,但实际上,我们已完全实现猎自动化到我们的生产服务器的远程连接,并将我们的WordPress数据库的mysql转储下载到本地环境。然后,通过运行搜索和替换操作,以更新siteurl值并允许网站链接在开发站点内正常工作。这非常强大,可以通过将命令保存到脚本并允许其执行来从需要的几行代码执行。最终结果是可重用的数据库导出/导入,可以使用简单的命令运行。

说点什么

500