- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经读过一些关于此问题的文章,但它们看起来很旧(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 中:
<?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/
我读到,对 Collection 实例的访问不应在类内同步。原因似乎是另一个对象可能会操纵列表,而不同步到第一个对象。然而,我想要同步的List是一个私有(private)字段,由所有者对象创建,并且
我需要决定多线程应用程序之一需要使用多少个计数信号量。我开始知道,如果我们知道同步点,那么我们就可以决定要使用的信号量的数量。什么是同步点? 最佳答案 同步点是执行流中一个线程必须等待其他繁忙线程的位
void Java_Package_Multithreading_againCallReadFile (JNIEnv *env, jobject obj) { if((*env)->Monito
对于我的一个家庭项目,我决定使用 docker 容器和 fig 进行编排(第一次使用这些工具)。 这是我的 fig.yaml: rabbitmq: image: dockerfile/rabbit
user32.dll 的文档 SetParent函数指出 When you change the parent of a window, you should synchronize the UIST
我是 PC 游戏的速通玩家(喜欢以尽可能快的方式完成游戏的人),我想在玩游戏时记录我的输入,以便稍后自动重播。所以我创建了一个小 C# 程序来做到这一点:基本上,它会启动一个计时器,每次我按下/松开一
我正在学习java并发,并使用一个在多人之间共享的银行帐户示例来尝试练习并发原理。 这是我的帐户类(class)。 public class Account(){ private int ba
我已经读过一些关于此问题的文章,但它们看起来很旧(2008 年),我希望有人可能有一个更优雅的解决方案。 我想知道 Expression Engine 开发人员如何使用本地测试和实时环境工作流程。 我
我是 Java 的新手,正在尝试学习同步语句的概念。下面的代码和语句来自 Java tutorial Oracle . 我的问题是,“nameList”变量是实例变量还是类变量?为什么它不包含在 sy
我在将 openWithCompletionHandler: (UIManagedDocument) 与主要事件同步时遇到一个基本问题。 情况:我有一个管理共享 UIManagedDocument 的
在 Grails 应用程序中,我们有一个接口(interface),它接受从单个请求中的参数创建的类似路径的 3 级结构,例如 level1/level2/document 对象 level2引用资料
我是一名优秀的程序员,十分优秀!