Php Expression Engine:同步开发和实时环境

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等)中开发我的频道、频道字段、主题和其他内容配置。一旦我高兴了,我想把我的更改推送到实时服务器上 棘手的部分是数据库和文件系统中都存

我已经读过一些关于这方面的帖子,但是它们看起来很老(2008年),我希望有人能有一个更优雅的解决方案

我想知道Expression Engine开发人员是如何使用本地测试和实时环境工作流的

我的live环境(Debian web服务器)上运行了Expression Engine 2.8.1。我想在笔记本电脑上的本地测试环境(MAMP服务器、VirtualBox VM等)中开发我的频道、频道字段、主题和其他内容配置。一旦我高兴了,我想把我的更改推送到实时服务器上

棘手的部分是数据库和文件系统中都存在特定的更改。此外,我不想将整个数据库推送到live server,因为每个数据库的路径/URL和其他配置选项都不同

我正在使用基于文件的模板,这使得这一部分的过程更容易,但数据库配置仍然是一个问题。是否有一种简单、干净的方法可以在这些环境之间导出/导入内容配置表


感谢您的帮助。

大多数人都在使用各种插件来实现同步,包括全局变量作为文件的低变量和代码段同步来实现代码段的同步

至于同步数据库更改,目前没有同步选项来同步频道条目等。您可以编写一个插件来从目录执行SQL,但您必须在SQL中对所有更改进行编码

如果您能够让Prod和Staging(Test)服务器相互通信,那么您可以跨这两个服务器设置数据库级复制,但我建议不要这样做,因为这意味着Prod/Staging中的任何更改都将复制到另一个服务器

然而,Yu可以为表达式引擎设置多个环境,只需稍加修改代码。例如,我为不同的环境使用不同的配置,我的文件系统结构与此类似:

  • 系统
  • 主题
  • 图像
  • 配置
    • config.env.php
    • config.local.php
    • config.prod.php
    • config.staging.php
    • config.master.php
在config.env.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'));