cakephp - 如何让Cakephp 3通过Apache环境变量选择数据库连接

标签 cakephp deployment environment

我正在使用 cakephp v3,并希望在两种不同的环境中安装该应用程序,一种用于开发,一种用于生产。两个安装都应包含完全相同的文件(和文件内容),因此我可以使用“git”或“svn”轻松部署应用程序。

如果两个环境托管在同一台计算机上,我需要不同的数据库设置(以便开发环境使用自己的“测试”数据库)。我考虑在 app.php 中配置两个“数据源”,一个用于生产的“默认”数据源,一个用于“开发”。

但是我如何在两个来源之间切换?

更具体地说:目前我在开发环境的 Apache 配置中定义了以下环境变量:

SetEnv CAKEPHP_DEBUG 1

然后我在 app.php 文件中更改了“debug”的定义,如下所示:

'debug' => (bool)getenv('CAKEPHP_DEBUG'),

这仅在开发计算机上启用 Debug模式。现在我也想以同样简单的方式切换数据库配置。

(我已经找到了一些 cakephp v2 的解决方案,但它们都相当旧,我不确定在 cakephp v3 中执行此操作的最佳方法是什么。)

最佳答案

manual

You can define as many connections as you want in your configuration file. You can also define additional connections at runtime using Cake\Datasource\ConnectionManager::config().

所以我想你可以检查AppController beforeFilter中debug的值并更改默认数据库连接

AppController.php

if(Configure::read('debug') == 1)
{
    ConnectionManager::config('default', [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'dev_server',
        'username' => 'dev_username',
        'password' => 'dev_passwd',
        'database' => 'development',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
    ]);
}

我认为你可以使用三元运算符在 app.php 中执行类似的操作

app.php

'Datasources' => [
    'default' => getenv('CAKEPHP_DEBUG')== 1 ? [ /* debug params */ ] : [ /* default params */]
    ...
]

但不知何故,这似乎不是“干净”的方法

我认为更简洁的方法是在 app.php 中设置这两个配置,然后在 appController 中选择要使用的配置

app.php

'Datasources' => [
    'debug' => [ /* debug params */ ],
    'default' => [ /* default params */]
]

表格文件

public static function defaultConnectionName() {
    if(Configure::read('debug') == 1)
        return 'debug';
    return 'default';
}

关于cakephp - 如何让Cakephp 3通过Apache环境变量选择数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36864867/

相关文章:

Python弱依赖项目的打包

class - 环境中有什么类别的对象? (右)

java - 在 java :comp/env? 中设置属性

php - CakePHP中的动态下拉框变化取决于数据库

php - cakephp上传插件-定义保存文件的目录

php - 跨域 ajax 和 php session

php - CakePHP 关联问题

c# - ClickOnce 部署 "Activation failed"FileNotFoundException

asp.net - 如何使用 Azure DevOps 部署多个应用程序?

variables - BAT if exist %environment variable folder% (系统文件夹)