【问题标题】:CakePHP Config FileCakePHP 配置文件
【发布时间】:2012-03-15 14:01:06
【问题描述】:

我想知道有没有一种方法可以设置配置,其中我可以有两个数据库条目,当环境是本地时和服务器上时工作。

很久以前,我在通过代码进行切换时遇到了一个解决方案。现在找不到了。你们是怎么做到的?

【问题讨论】:

    标签: cakephp cakephp-1.3 cakephp-2.0


    【解决方案1】:

    我有一个带有本地配置文件的设置。我在 app/config/core.php 的底部添加以下行:

    if(file_exists(ROOT.'/app/config/core.local.php')) {
        include_once(ROOT.'/app/config/core.local.php');
    }
    

    在 core.local.php 中,我可以覆盖本地机器上所有不同的设置。 database.php 也是如此。

    【讨论】:

      【解决方案2】:

      我使用的配置类正是这样做的: http://www.dereuromark.de/2010/08/17/development-vs-productive-setup

      最近我将它重写为 2.0 作为插件版本。 它现在负责测试环境并减少您必须编写的配置行数: http://www.dereuromark.de/2012/02/25/dynamic-database-switching/

      【讨论】:

      • 谢谢马克 :) 我提出的上述答案也有效。知道为什么你的方法更好吗?
      • 这不是更好。我的做了一些额外的事情,对此(DRY)有更清洁的方法,如博客文章中所述。它也适用于 CLI(使用 path 数组)。但如果你的解决方案适合你,为什么不呢。
      【解决方案3】:

      我认为它基于 IP 在本地环境 IP 为 127.0.0.1 在实时环境中,IP 永远不会是 127.0.0.1

      我的看法

      谢谢

      检查 lib/Cake/Utility/String.php 查看名为的函数 公共静态函数 uuid()

      干杯

      再次感谢

      【讨论】:

      • 是的,它的工作原理有些相似......该死的谷歌找不到我的博客文章:P
      • 检查 lib/Cake/Utility/String.php 查看名为 public static function uuid() 的函数
      【解决方案4】:

      成功了

      class DATABASE_CONFIG {
      
          public $default = array(
              'datasource' => 'Database/Mysql',
              'persistent' => false,
              'host' => 'localhost',
              'login' => 'username',
              'password' => 'password',
              'database' => 'database_name',
              'prefix' => '',
              //'encoding' => 'utf8',
          );
      
          public $live = array(
              'datasource' => 'Database/Mysql',
              'persistent' => false,
              'host' => 'db.HOST.net',
              'login' => 'username',
              'password' => 'password',
              'database' => 'database_name',
              'prefix' => '',
              //'encoding' => 'utf8',
          );
      
          public function __construct(){
              if (isset($_SERVER) && isset($_SERVER['SERVER_NAME'])) {
                  if (strpos($_SERVER['SERVER_NAME'], 'localhost') === false) {
                      $this->default  = $this->live;
                  }       
              }
          }
      
      }
      

      【讨论】:

      • 你试过用那个烘焙吗?我以前用过,也许 1.2 和 bake 没用。同样在负载均衡器后面,您的 SERVER_NAME 默认为 localhost,这不是一个好的解决方案。
      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 2011-05-21
      相关资源
      最近更新 更多