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

时间:2014-04-06 12:36:11

标签: php mysql workflow expressionengine

我已经阅读了一些有关此事的帖子,但它们看起来很旧(2008年),我希望有人可能会有一个更优雅的解决方案。

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

我在我的实时环境(Debian Web服务器)上运行Expression Engine 2.8.1。我想在我的笔记本电脑(MAMP服务器,VirtualBox VM,无论如何)上的本地测试环境中开发我的频道,频道字段,主题和其他内容配置。一旦我开心,我想将我的更改推送到实时服务器。

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

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

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

1 个答案:

答案 0 :(得分:0)

大多数人都使用各种插件来实现同步,包括将全局变量的低变量用作文件,使用Snippet Sync对片段进行同步。

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

如果您能够让Prod和Staging(测试)服务器相互通信,那么您可以在两者之间设置数据库级复制,但我会建议不要这样做,因为这意味着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 */

然后在每个config。{environment} .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 */

您也可以在您的环境配置中添加配置覆盖。我已将示例config.master.php添加到pastebin,此处为: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中删除所有数据库设置(因此你有一个vanilla文件)并添加配置路径,如下所示:

  

     

$ active_group =&#39;表达发动机&#39 ;; $ active_record = TRUE;

     

$ db [&#39;表达式&#39;] [&#39; dbdriver&#39;] =&#39; mysql&#39 ;;   $ db [&#39;表达式&#39;] [&#39; dbprefix&#39;] =&#39; exp _&#39 ;;   $ db [&#39;表达式&#39;] [&#39; pconnect&#39;] = FALSE;   $ db [&#39;表达式&#39;] [&#39; swap_pre&#39;] =&#39; exp _&#39 ;;   $ db [&#39;表达式&#39;] [&#39; db_debug&#39;] =正确;   $ db [&#39;表达式&#39;] [&#39; cache_on&#39;] = FALSE;   $ db [&#39;表达式&#39;] [&#39; autoinit&#39;] = FALSE;   $ db [&#39;表达式&#39;] [&#39; char_set&#39;] =&#39; utf8&#39 ;;   $ db [&#39;表达式&#39;] [&#39; dbcollat​​&#39;] =&#39; utf8_general_ci&#39;;

     

require(realpath(dirname( FILE ))。   &#39; /../../../配置/ config.master.php&#39;));

     

/ *文件结尾database.php / / 位置:   ./system/expressionengine/config/database.php * /

应该允许您使用相同的文件库,并且仍然能够通过源代码控制部署到开发,登台和生产而没有任何问题。

事实上,我实际上只是与我的一些客户建立起来,并且它的工作完美无缺。只是一个FYI,您可能需要为某些EE模块付费,以帮助促进保存为变量和片段的文件。