连接Yii中的2个数据库,同时处理测试数据和实际数据

时间:2013-11-02 01:43:01

标签: mysql yii yii-components yii-events

我的网站正准备上线。由于在我的网站上开发了更新,我想在不影响实际数据的情况下测试真实服务器中的更新。我需要2个数据库(同一个数据库有2个名字)同时连接我的网站。一个用于测试我自己和其他用于真实用户。

我尝试将config / main复制到config / main_test,将index.php主复制到index_test.php。并在config / main.php和config / main_test.php中实现了2个数据库连接。并将这些文件连接到index.php和index_test.php,并尝试使用http://mysite.com/index.phphttp://mysite.com/index_test.php运行该网站。但是两个URL都基于config / main.php中提供的数据库连接工作。

如何使用2个数据库?我不认为保留整个网站的2份副本是个好主意。欢迎提出所有建议

3 个答案:

答案 0 :(得分:1)

您可以通过将配置文件 main.php 复制到 main-test.php index.php 来实现它索引test.php的。在 main-test.php 文件中设置新的数据库连接属性。在 index-test.php 中更改配置路径,您也可以启用调试。以下是index-test.php的示例:

$yii = '/opt/yii/framework/yii.php';
$config = dirname(__FILE__) . '/protected/config/main-test.php';

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', 3);

require_once($yii);
Yii::createWebApplication($config)->run();

不要忘记在其中使用带有index-test.php的URL。

答案 1 :(得分:0)

定义一个等于'DEVELOPMENT'或'PRODUCTION'

的环境变量
define('ENVIRONMENT', 'DEVELOPMENT');

然后您的数据库连接可以基于该常量。

if(ENVIRONMENT == 'DEVELOPMENT'){
    //connect to development database
}

如果希望网站在生产模式下工作,可以将其切换为“PRODUCTION”。

你不应该在生产机器上进行测试。

答案 2 :(得分:0)

  

我想测试真实服务器中的更新而不影响实际数据

你实际上不可能。最好在暂存环境中使用实时数据的副本,以确保工作正常。如果您的代码需要新的数据库字段而您的数据库没有它,那么您将遇到问题。

最好让您在检查时对迁移进行非实时数据更改。