php - 表达式引擎: Synchronising development and live environments

标签 php mysql workflow expressionengine

我已经读过一些关于此问题的文章,但它们看起来很旧(2008 年),我希望有人可能有一个更优雅的解决方案。

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

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

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

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

感谢任何和所有帮助。

最佳答案

大多数人都使用各种插件来实现同步,包括将全局变量作为文件使用的 Low Variables 以及对片段执行相同操作的 Snippet Sync。

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

如果您有能力让生产和登台(测试)服务器相互通信,那么您可以在两者之间设置数据库级复制,但我建议不要这样做,因为这意味着生产/登台中的任何更改都会被复制到其他服务器。

但是,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 文件中,您可以执行与此类似的操作: 配置.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 中删除所有数据库设置(这样您就有一个普通文件)并添加到配置路径中,如下所示:

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

$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(FILE) . '/../../../config/config.master.php'));

/* End of file database.php / / Location: ./system/expressionengine/config/database.php */

这应该允许您使用相同的文件库,并且仍然能够通过源代码管理毫无问题地部署到开发、登台和生产。

事实上,我刚刚和我的一些客户一起设置了这个,并且它运行得非常完美。仅供引用,您可能需要支付一些 EE 模块的费用,以帮助将变量和片段保存为文件。

关于php - 表达式引擎: Synchronising development and live environments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22894105/

相关文章:

php - 使用 HTTP header 重定向到不同的页面/文档还是合并动态消息来通知用户访问被拒绝,哪个更好?

mysql - 加入同一个表的子集

.net-core - Github 操作对 .net git Restore buld 使用存储库名称两次

php - WAMP风格服务器部署/安装问题

php - PHP 中的进程间通信与连续进程?

PHP-用多列的最小值更新一列

工作流程设计器无法在 VS 2013 中加载

php - 如何将sql查询结果转换为Json对象{"timestamp": value}

mysql - MySQL 中的 RETURNING 等价物

r - 如何更新 .RData?