Php Expression Engine:同步开发和实时环境
我已经读过一些关于这方面的帖子,但是它们看起来很老(2008年),我希望有人能有一个更优雅的解决方案 我想知道Expression Engine开发人员是如何使用本地测试和实时环境工作流的 我的live环境(Debian web服务器)上运行了Expression Engine 2.8.1。我想在笔记本电脑上的本地测试环境(MAMP服务器、VirtualBox VM等)中开发我的频道、频道字段、主题和其他内容配置。一旦我高兴了,我想把我的更改推送到实时服务器上 棘手的部分是数据库和文件系统中都存在特定的更改。此外,我不想将整个数据库推送到live server,因为每个数据库的路径/URL和其他配置选项都不同 我正在使用基于文件的模板,这使得这一部分的过程更容易,但数据库配置仍然是一个问题。是否有一种简单、干净的方法可以在这些环境之间导出/导入内容配置表Php Expression Engine:同步开发和实时环境,php,mysql,workflow,expressionengine,Php,Mysql,Workflow,Expressionengine,我已经读过一些关于这方面的帖子,但是它们看起来很老(2008年),我希望有人能有一个更优雅的解决方案 我想知道Expression Engine开发人员是如何使用本地测试和实时环境工作流的 我的live环境(Debian web服务器)上运行了Expression Engine 2.8.1。我想在笔记本电脑上的本地测试环境(MAMP服务器、VirtualBox VM等)中开发我的频道、频道字段、主题和其他内容配置。一旦我高兴了,我想把我的更改推送到实时服务器上 棘手的部分是数据库和文件系统中都存
感谢您的帮助。大多数人都在使用各种插件来实现同步,包括全局变量作为文件的低变量和代码段同步来实现代码段的同步 至于同步数据库更改,目前没有同步选项来同步频道条目等。您可以编写一个插件来从目录执行SQL,但您必须在SQL中对所有更改进行编码 如果您能够让Prod和Staging(Test)服务器相互通信,那么您可以跨这两个服务器设置数据库级复制,但我建议不要这样做,因为这意味着Prod/Staging中的任何更改都将复制到另一个服务器 然而,Yu可以为表达式引擎设置多个环境,只需稍加修改代码。例如,我为不同的环境使用不同的配置,我的文件系统结构与此类似:
- 系统
- 主题
- 图像
- 配置
- config.env.php
- config.local.php
- config.prod.php
- config.staging.php
- config.master.php
<?php
/*
Environment Declaration
*/
if ( ! defined('ENV'))
{
switch ($_SERVER['HTTP_HOST'])
{
// === PRODUCTION ENVIRONMENTS
case 'host_name' :
define('ENV', 'prod');
define('ENV_FULL', 'Production');
define('ENV_DEBUG', FALSE);
define('ENV_TYPE', 'production');
break;
// === STAGING ENVIRONMENTS
case 'host_name' :
define('ENV', 'stage');
define('ENV_FULL', 'Staging');
define('ENV_DEBUG', FALSE);
define('ENV_TYPE', 'staging');
break;
// === DEFAULT TO LOCAL
default :
define('ENV', 'local');
define('ENV_FULL', 'Local');
define('ENV_DEBUG', FALSE);
define('ENV_TYPE', 'local');
break;
}
}
/* End of file config.env.php */
/* Location: ./config/config.env.php */
然后在/system/expressionengine/config/database.php中删除所有的db设置(这样您就有了一个普通的文件)并添加到配置路径中,如下所示:
$active_group='expressionengine'$活动记录=真
$db['expressionengine']['dbdriver']='mysql';
$db['expressionengine']['dbprefix']='exp_';
$db['expressionengine']['pconnect']=FALSE;
$db['expressionengine']['swap_pre']='exp_';
$db['expressionengine']['db_debug']=TRUE;
$db['expressionengine']['cache_on']=FALSE;
$db['expressionengine']['autoinit']=FALSE;
$db['expressionengine']['char_set']='utf8';
$db['expressionengine']['dbcollat']='utf8_general_ci'
require(realpath(dirname(文件)。
'/../../../config/config.master.php')
/*文件结尾database.php//位置:
./system/expressionengine/config/database.php*/
这应该允许您使用相同的文件库,并且仍然能够通过源代码管理部署到dev、staging和production,而不会出现任何问题
事实上,我刚刚和我的一些客户建立了这个系统,它工作得非常完美。仅供参考,您可能需要支付一些EE模块的费用,以帮助将变量和代码段另存为文件
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Production config overrides & db credentials
*
* Our database credentials and any environment-specific overrides
*
*/
// safeguard for now
error_reporting(E_ALL);
@ini_set('display_errors', 1);
$env_db['hostname'] = 'dbhost';
$env_db['username'] = 'dbuser';
$env_db['password'] = 'dbpassword';
$env_db['database'] = 'dbname';
/* End of file config.prod.php */
/* Location: ./config/config.prod.php */
require(realpath(dirname(__FILE__) . '/../../../config/config.master.php'));