1

我正在开始一个新项目。

我正在使用 ZF2。我刚刚安装了它并启动并运行了 Skeleton 应用程序。

这是我的部署过程:

  • 我在本地机器上开发
  • 然后我推送到我的公共 github 存储库
  • 然后我使用 deployhq.com 将它们部署到我的生产服务器上,用户可以在该服务器上看到所做的更改。

我试图在博客等上查看堆栈、zend 站点和谷歌,但对我的问题仍然没有任何真正的理解或解决方案。

我希望应用程序根据其环境使用不同的数据库凭据。例如,如果在我的本地机器“dev”上,则使用凭据 A,但如果在实时服务器上,则使用凭据 B。

我已经阅读了很多关于全局和本地自动加载配置文件等的信息,但请记住我的 github 存储库是公开的,任何我提交带有我的数据库详细信息的任何配置文件的地方都是可见的。

我想知道是否有办法拥有相同的理论,具有数据库连接的全局和本地文件,我手动上传生产详细信息,而不是出于安全原因通过 git,并告诉 git 以某种方式忽略本地配置文件?我还需要知道如何根据环境和位置告诉应用程序使用这些配置文件。

4

1 回答 1

5

在 Zend 2 中有

  1. 全局配置文件 &
  2. 模块级配置文件

如果你想知道那里的使用,你可以参考下面的链接

ZF2 中的配置是如何工作的

当我遇到相同的情况时,我使用上面的链接来理解和利用 Zend Config 模块,它非常适合处理这种情况。

创建两个文件

生产.php local.php

在这两个文件中

根据环境返回这个数组

return array(
     "dbname" => "yourdbname"
     "dbhostname" => "dbhostname"
     "dbusername" => "yourdbusername",
     "dbpassword" => "yourdbpassword"
 );

在您的 zend 框架应用程序的 config/autoload/ 目录中

稍后按照以下说明编辑您的 config/application.config.php 文件

// 从 Apache vhost 文件中获取应用程序环境(在这里你可以在你的 apache vhost 文件中设置为生产或本地)

$applicationEnv = getenv('APPLICATION_ENV');

$environmentSpecificConfigPath = "config/autoload/{,*.}{".$applicationEnv.",local}.php";

// 接下来在配置数组中传递环境特定的配置路径

 'config_glob_paths' => array($environmentSpecificConfigPath)

在任何控制器或动作中

你可以使用下面的代码

 $configArray = $this->getGlobalConfig(); 

现在 $configarray 拥有您所有的数据库凭据来创建连接

$adapter = new Zend\Db\Adapter\Adapter(array(
    'driver' => 'Mysqli',
    'database' => $configArray['dbname'],
    'username' => $configArray['dbusername'],
    'password' => $configArray['dbpassword']
 ));

如果您在整个应用程序中使用配置数组连接数据库,则无需担心环境更改只需确保您的 vhost 文件中有 Apache APPLICATION_ENV 条目

您可以通过在 apache vhost 文件中添加以下行来做到这一点

 SetEnv APPLICATION_ENV "production" // in your production server 

 SetEnv APPLICATION_ENV "local"  // in your local 

最后但同样重要的是,您可以使用 Zend Experts 模块 ZeDB

https://github.com/ZendExperts/ZeDb

管理您的 CRUD 应用程序

希望以上步骤可以帮助您创建环境

于 2013-09-20T15:47:16.740 回答