我在一个盒子上进行开发,然后在另一个盒子上进行生产。现在,我只是转储数据库,然后查找URL更改的替换项。然后复制文件并导入新的SQL。
有更好的方法吗?
我在一个盒子上进行开发,然后在另一个盒子上进行生产。现在,我只是转储数据库,然后查找URL更改的替换项。然后复制文件并导入新的SQL。
有更好的方法吗?
Answers:
@ Insanity5902:从第一天开始使用WordPress以来,将WordPress网站从一个盒子部署到另一个盒子就成了PITA。(实话实说,在我开始使用WordPress之前,这是Drupal的PITA了2年,所以问题肯定不仅仅限于WordPress。)
令我感到困扰的是,每当我需要移动一个站点时,我都不得不花费很多重复的精力,这使我无法像我期望的那样频繁地部署和测试。因此,大约4到6个月前,我开始致力于解决Webhost迁移问题的插件,并在WP Tavern论坛上提到了自己的想法。
很好的发展到今天,我已经使它工作了很多,我方便地将其称为“ WP Migrate Webhosts”。鉴于您的问题,即使该插件仍处于测试阶段(甚至可能是alpha测试版),但我认为我已经准备好让人们开始喜欢它。
设想的用例是:
您可以从我的网站下载该插件,然后解压缩到您的插件目录中(如果您不知道如何执行此操作,那么此插件不适合您,因为它需要知道他们在做什么的人才能使用。)将此插件保持在线状态,直到我将其发布到WordPress.org,之后再在那里查找。
要使用它,你采取不同的方法在您的wp-config.php
正常通过注释掉四(4)规定DB_NAME
,DB_USER
,DB_PASSWORD
和DB_HOST
,而是注册了主机管理的默认值,然后登记有关每个虚拟主机提供商本身的信息。这就是该部分的wp-config.php
样子(请注意,第一部分注释掉了不需要的代码,还请注意,我在本地计算机上使用不可路由的.dev
顶级域设置了hosts文件,从而使日常开发变得更加容易。在Mac上,VirtualHostX轻而易举地做到了:
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
//define('DB_NAME', 'wp30');
/** MySQL database username */
//define('DB_USER', 'wp30_anon');
/** MySQL database password */
//define('DB_PASSWORD', '12345');
/** MySQL hostname */
//define('DB_HOST', '127.0.0.1:3306');
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/wp-webhosts.php');
register_webhost_defaults(array(
'database' => 'example_db',
'user' => 'example_user',
'password' => '12345',
'host' => 'localhost',
'sitepath' => '', // '' if WordPress is installed in the root
));
register_webhost('dev',array(
'name' => 'Example Local Development',
'host' => '127.0.0.1:3306',
'domain' => 'example.dev',
'rootdir' => '/Users/mikeschinkel/Sites/example/trunk',
));
register_webhost('test',array(
'name' => 'Example Test Server',
'rootdir' => '/home/example/public_html/test',
'domain' => 'test.example.com',
));
register_webhost('stage',array(
'name' => 'Example Staging Server',
'rootdir' => '/home/example/public_html/stage',
'domain' => 'stage.example.com',
));
register_webhost('live',array(
'name' => 'Example Live Site',
'rootdir' => '/home/example/public_html/',
'password' => '%asd59kar12*fr',
'domain' => 'www.example.com',
));
require_once(ABSPATH . 'wp-content/plugins/wp-migrate-webhosts/set-webhost.php');
希望这是(主要)自我解释。我试图使代码尽可能整洁,但是不幸的是,它要求require_once()
在webhost注册代码块前后添加这两行密码,因为在调用之前,我没有办法“ 钩住 ” WordPress wp-config.php
。
更新wp-config.php
完之后,您可以简单地使用URL快捷方式wp-migrate-webhosts
进入管理屏幕,如下所示:
以上将带您到管理员屏幕等,其具有描述文本的公平位,并允许您迁移以下FROM选择域从(迁移后的任何一个单一的点击其他网站托管域的注意:这个例子说明会DOWN从测试/台/ Live服务器到当地发展,但放心,它可以迁移TO它恰好位于任何域,这也意味着该插件将是伟大采取现有的直播现场,并迅速得到一个地方的发展环境中工作!):
如果不清楚,在这种情况下,“ 迁移 ”是指将当前数据库中的所有引用更新为适合当前定义的Web主机(并且通过检查嗅探到 “ 当前 ” )。$_SERVER['SERVER_NAME']
该插件最酷的地方是它实现了一些基本的迁移,但是任何人都可以钩住它并执行自己的迁移。例如,如果添加一个库插件,该插件在数据库中存储了图像的完整路径,则可以挂钩该migrate_webhosts
操作,该操作将作为元数据数组分别从 “ 从 ” Webhost和“ 至 ” Webhost 传递给您,使用SQL或任何适用的WordPress API函数在数据库中执行您需要执行的任何操作来进行迁移。是的,我们每个人都可以在没有插件的情况下执行此操作,但是如果没有插件,我发现编写所有所需的代码比付出的努力多。使用该插件,可以更轻松地编写这些微小的钩子并加以使用。
您可能还会发现我在未测试的情况下迁移失败,也许您可以帮助我改善插件?任何想要的人都可以通过我的gmail帐户给我发送电子邮件(我的别名为“ mikeschinkel”。)
此外,插件可以接受,除了它承认像那些用户定义的虚拟主机提供商的元数据database
,user
,password
,host
,domain
等一个很好的例子可能是googlemaps_apikey
在那里你可以存储为每个域,你的谷歌地图的插件需要不同的API密钥正确操作(在使用Google Maps插件的人当中,尚未将应用程序部署到实时服务器并忘记将代码更改为正确的API密钥吗?老实说,... :)使用此插件,googlemaps_apikey
register_webhost()数组中的一个元素和一个小的自定义migrate_webhosts
钩子,可以有效消除这一点!
就是这样。我在WordPress Answer's Exchange上启动此插件,因为@ Insanity5902的问题触发了它。让我知道是否有帮助,如果合适的话,请在这里;如果没有帮助,请通过电子邮件。
PS:如果您决定使用此标记,请记住它是alpha / beta,这意味着它将更改,因此,如果您想立即使用它,请准备进行一些小手术,然后在被许多人殴打后使用已发行的版本。
PPS我的目标是什么?我很高兴看到它迁移到WordPress核心,以便每个人都可以使用它。但是,在此之前甚至甚至可以考虑,很多人必须对使用它感兴趣,以确保它实际上解决了它可能带来的更多问题。因此,如果您喜欢这个主意,那么请务必使用它,并帮助我获得发展动力,最终将其希望地纳入WordPress核心。
如果可能的话,我将WP_HOME
和WP_SITEURL
在wp-config.php
。这与数据库转储和导入结合在一起,是我所熟悉的所有解决方案中最简单的一种。
http://codex.wordpress.org/Changing_The_Site_URL#Edit_wp-config.php
我最喜欢的黑客 /etc/hosts
在您的机器上添加一个设置,使生产域指向您的开发箱。要部署到生产环境,您将所有文件同步并推送数据库。
这种策略的风险是显而易见的。您可能会将开发环境与生产环境混淆。
不过,这仍然是一个简单的解决方法。
几个月前迁移到WP时,我想要类似的东西,所以我写了一个非常简单的shell脚本,该脚本在ssh上使用rsync和mysqldump:
http://snarfed.org/sync_wordpress
它不是复杂的或基于Web的,但我对此感到满意。
WP Engine是一项新服务,提供“一键式登台”:
WPEngine具有称为“登台”的独有功能。它的工作方式如下:在对博客进行可怕的更改之前,请单击“快照”按钮。我们会完整复制您的博客,并将其设置在单独的安全区域中。您可以随心所欲玩;什么都没有。只有当您准备好将其发布时,您才可以触摸您的主站点。
看起来这是一种非常容易的方法,可以快速地从开发过渡到生产,尤其是对于已经上线的站点。
复制器插件: 这是我一直在努力的插件。它目前处于测试阶段,但可以完成大多数网站的工作。现在,它针对较小的WordPress安装。 http://wordpress.org/extend/plugins/duplicator/
资源: 可在以下位置找到该插件的其他资源:http : //lifeinthegrid.com/duplicator/
社区: 请让我们知道您的成功或可能遇到的任何问题!为了更轻松地管理各个线程,请将问题发布到WordPress.org插件论坛。请不要将插件中的任何日志记录数据发布到在线论坛中。日志数据可以提交到我们的支持站点。
您可能会看看iThemes的产品BackUpBuddy。我只用了两次,每次都挂了一两个钩,但总的来说看起来很有希望。
我亲自处理与我在Github上的项目,被称为这一问题Autopress。我还没有一个完美的解决方案,但是我已经接近了,特别是wpengine的wpstage插件。
这看起来很有希望。我们正在研究一些脚本来处理某些数据的迁移,例如wp-options,更改db中的路径,通过媒体进行复制。
我的问题是,在线站点在不断发展,而另一个站点正在开发中。我们工作的一个站点每天有20条帖子,每天有3,000多个评论。太多数据无法通过phpmyadmin或通过命令行进行移动。同样,由于某种原因,移动数据总是会导致UTF问题。
而且,现在看来菜单选项存储在数据库中了,我还要处理更多的事情。
我将所有代码都检入到SVN中,并通过FTP从服务器(Beanstalk)部署代码。但是,这不会为我更改数据库或激活新插件。
我现在的计划是在开发过程中创建清单文件,以对实时站点进行所有更改。
例如,文件将具有人类可读的行
它包括激活插件,wp选项移动,图像移动,页面移动。然后,我的插件将检测清单文件,并对登台站点进行所有更改。
一旦测试完并确定我拥有了所有东西,就可以确定它可以在生产中使用。
这个插件仍然只是一个主意,但是我为它编写了一些代码。
另外,如果只想更改数据库中的URL,则可以使用以下SQL。
只需$old$
用旧域名和$new$
新域名替换
update wp_postmeta set meta_value = replace(meta_value, '$old$' , '$new$') ;
update wp_posts set post_content = replace(post_content, '$old$' , '$new$') ;
update wp_options set option_value = replace(option_value, '$old$' , '$new$') ;
两个具有相似目标的Google Summer of Code项目:
尽管这里不乏好的解决方案,但本着共享的精神,我认为我应该将bash部署脚本添加到堆中:https : //github.com/jplew/SyncDB
SyncDB是bash部署脚本,旨在使繁琐的工作不再同步Wordpress网站的本地和远程版本。它允许在本地环境(例如MAMP)中工作的开发人员使用单个终端命令将更改快速“推”或“拉”入生产服务器或从其生产服务器中拉出。
该脚本与Mark Jaquith的WP-Skeleton一起很好地工作,并利用mysqldump
,git
并rsync
通过两个简单的步骤来同步整个站点(数据库,代码和媒体):
./syncdb
git push hub master
我一直在使用http://wordpress.org/plugins/wp-clone-by-wp-academy/。效果很好!
只需3个步骤:
它会自动调整所有URL(包括序列化字符串替换),因此不会丢失小部件配置等风险。
我唯一遇到的问题是某些数据库较大(约300MB)的网站,这些网站导入网站备份时导致PHP脚本执行超时。
截至2017年,这是我发现处理WordPress数据库从开发到生产的转移的两种最佳方法。
https://wordpress.org/plugins/wp-migrate-db/
这些WordPress插件可让您在WordPress安装之间推送,提取和同步数据库表。由于许多原因,这比查找/替换要好得多,因为它有:
我很喜欢自己做的工作,因此我建议您支持Brad Touesnard先生,并购买真实物品的许可证副本。WP Sync DB是复制品,因此始终落后于支持。使用此插件,过程非常简单:
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
这个免费工具不是插件,而是安装在WordPress生产安装的根目录中。这不像WP Migrate DB Pro那样好,因为它需要一些手动步骤,但是仍然是一个始终有效的好选择。使用这种方法时,过程如下所示:
您可以使用更快的方法,但是这会导致生产站点停机,我认为这是不可接受的。这就是为什么我们称其为生产,对吗?
另一个付费解决方案:Xtreme One主题框架发布了带有Xtreme Backup的1.2版,该框架允许您“将Childthemes,Layouts或Widgets的设置及其内容/内容作为XML文件导出或导入”。
一位同事发现了这个。有趣的概念,尽管它在跨服务器上不起作用,但看起来像。我仍在探索它,但看起来它可能适合于暂存实例
RAMP是Crowd Favorite提供的一个新的内容部署插件,看起来非常漂亮。不过,它的价格是250美元,所以我还没有尝试过。但是,可能只需要为自己节省时间就可以收回成本,所以我正在考虑。
与提到的大多数其他方法相比,它的最大好处是,它可以智能地合并帖子,注释等。这不仅是导入mysqldump,还更像是数据库的源代码控制。例如,在部署帖子时,如果产品中尚不存在标签,则还将部署该帖子的标签。
让我放弃我的最爱之一:-)
// proven local<->live codefork (covers local network testing, i.e. from mobile devices):
$GLOBALS['is_local'] =
in_array( $_SERVER['REMOTE_ADDR'], array("127.0.0.1","::1")) || // simple localhost (IPv4 IPv6)
$_SERVER['HTTP_HOST'] == 'local.workblog' || // call by local name (adjust)
substr($_SERVER["REMOTE_ADDR"],0,8) == '192.168.'; // (mobile) device in local network
$table_prefix = NULL; // ensure scope
if ( $GLOBALS['is_local'] ) // LOCAL fork ------------------------
{
....
}
else // STAGE/LIVE fork -------------------
{
...然后您从那里开始工作。DB_NAME,DB_USER ... table_prefix。就我个人而言,我在本地(以避免一些烦人的警告)上打开ALTERNATE_WP_CRON ,在两者(如果您不是开发人员)或仅直播(如果是)上都打开WP_DEBUG,那么另一个ini_set('display_errors', '0');
直播应用也可以做得更好,最后,蚂蚁如上所述:WP_HOME和WP_SITEURL分别指向本地/实际网址。
差不多了,经典的WordPress上面什么也没有,“那就停止编辑!” 线...
192.168。部分可让您在本地网络中进行一些本地测试(即通过平板电脑或手机进行)
$ GLOBALS ['is_local']也可以在主题开发中派上用场,例如一些额外的调试输出等。
WP_LOCAL_DEV
常量以实现类似的效果
另一个处理站点服务器迁移的有用工具是WordPress CLI,本文对它可以做什么进行了很好的概述,但是“搜索和替换”部分特别适用于查找所有对旧/ dev网站url的引用。 :
这是有史以来最简单的方法:https :
//themes.artbees.net/docs/website-migration/
只需单击两次即可。一出口,一进口。
使用多合一WP迁移插件是可能的。上面的链接显示了如何使用它。
遵循答案一段时间后,我创建了自己的小插件-Pitta Migration。原因是:
WP_HOME
和WP_SITEURL
选项wp_options
URL-涵盖了插件/主题何时忽略这些URL我认为,最简单的方法是手动传输。只需将wp-content文件夹和wp-config.php文件复制到新主机。从旧主机导出数据库,并将其导入新主机的新数据库。
在新主机数据库中,转到wp-option表,然后将站点URL和Blog URL从旧主机更改为新主机地址。例如从http:// localhost / wp到http://example.com
现在,在wp-config文件中,只需使用新的主机信息更改数据库和用户的信息即可。
现在登录到新的wp-admin并进入设置并保存永久链接。
大功告成 我认为这很简单,无需使用任何插件。
我尝试了不同类型的插件,所有这些都有很多问题。
所以我更喜欢这种简单的手动传输,我认为它更容易。