表达式引擎:同步开发和实时环境


Expression Engine: Synchronising development and live environments

我已经读过一些关于这个的文章,但它们似乎很旧(2008),我希望有人可能有一个更优雅的解决方案。

我想知道表达式引擎开发人员如何使用本地测试和实时环境工作流。

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

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

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

任何和所有的帮助都表示赞赏。

大多数人都在使用各种插件来获得同步,包括全局变量作为文件的低变量和片段同步对片段执行相同的操作。

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

如果您能够让生产和暂存(测试)服务器相互通信,则可以在两者之间设置数据库级复制,但我建议不要这样做,因为这意味着生产/暂存中的任何更改都将复制到另一台服务器。

但是,Yu 可以通过稍微修改代码为表达式引擎设置多个环境。例如,我为不同的环境使用各种配置,我的文件系统结构类似于这样:

  • 系统
  • 主题
  • 图像
  • 配置
    • config.env.php
    • config.local.php
    • config.prod.php
    • config.stageaging.php
    • 配置大师.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 */

然后在每个配置中。{环境}.php文件,您可以执行类似操作:config.prod.php

<?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 */

您也可以在环境配置中放置配置覆盖。我在 pastebin 中添加了一个示例 config.master.php,在这里:http://pastebin.com/t9L2Ef1E

不,最后要做的是向/system/expressionengine/config/config.php 和 database.php 文件添加一些代码。

首先,在/system/expressionengine/config/config.php 文件中,您需要添加以下代码(请注意,您的文件路径可能不同,因此您可能需要更新以下代码以满足您的需求)

将其添加到文件底部:

require(realpath(dirname(__FILE__) . '/../../../config/config.master.php'));

然后在/system/expressionengine/config/database 中.php删除所有数据库设置(这样你就有一个原版文件)并添加配置路径,如下所示:

$active_group = 'expressionengine'; $active_record = TRUE;

$db['表达式引擎']['dbdriver'] = 'mysql'; $db['表达式引擎']['dbprefix'] = 'exp_'; $db['表达式引擎']['pconnect'] = FALSE; $db['表达式引擎']['swap_pre'] = 'exp_'; $db['表达式引擎']['db_debug'] = TRUE; $db['表达式引擎']['cache_on'] = FALSE; $db['表达式引擎']['autoinit'] = FALSE; $db['表达式引擎']['char_set'] = 'utf8'; $db['表达式引擎']['dbcollat'] = 'utf8_general_ci';

require(realpath(dirname(FILE) . '/../../../config/config.master.php'));

/* 文件数据库结束.php//位置: ./system/expressionengine/config/database.php */

这应该允许您使用相同的文件库,并且仍然能够通过源代码管理部署到开发、暂存和生产,而不会出现问题。

事实上,我只是与我的一些客户建立了这个,并且它完美地工作。仅供参考,您可能需要为某些EE模块付费,以帮助将变量和片段另存为文件。