Symfony的2 - 多服务器配置(Symfony 2 - multiple server co

2019-06-23 09:33发布

我们开始采用的Symfony 2项目在这里工作,这是伟大的,但有我的工作来解决,我已经几乎得到了一个挑战,但并不完全。

Symfony的把环境作为一个单一的服务器上的独立的运行时的概念。 这是伟大的,因为你可以用不同的前端控制器(网络),或者使用在心血来潮的ENV开关(CLI)运行时之间进行切换。

但是,我们的代码是部署在多个服务器作为开发过程的一部分。 每个人都有一个本地虚拟机,然后通过代码集成,QA,分期,终于生产向上传播。

所以,我们的环境的概念是服务器(虚拟或物理)。 下面是与此自定义配置的目标

  1. 维护的Symfony的开箱即用的功能,在对于运行时环境切换
  2. 允许公共(即,显影剂控制)配置每个服务器
  3. 维持每个服务器私人(即,受控的SysAD)构
  4. 将努力为Web和CLI

这意味着我们不能只100%依靠parameters.ini或任何静态命名的文件,对于这个问题,因为开发人员需要在每个服务器的配置控制以及所有该文件将被未来生活的海誓山盟的饭桶。

所以,我想要就是这个。 添加一个新的价值parameters.ini那台服务器的环境。 像这样的事情

应用程序/配置/ parameters.ini

[parameters]
    server="int"

然后,在内核中,加载基于该值的附加配置文件。 例如,我会为这个热爱工作,但它不会(因为容器还没有在这个步骤存在)

应用程序/ AppKernel.php

public function registerContainerConfiguration(LoaderInterface $loader)
{
  $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');

  // Per-server config
  $server = $this->getContainer()->getParameter( 'server' );        
  if ( $server )
  {
    $loader->load(__DIR__.'/config/server/'.$server.'.yml');
  }
}

这将使像应用程序文件的使用/配置/服务器/ int.yml,开发人员可以用它来控制非私有的(即不parameters.ini)的配置值。

感谢您的阅读,让我知道如果有什么是混乱的。

编辑

为了澄清,我的事情不能使用或依赖

  • *从用户的个人资料,或通过nix的环境变量export 。 为什么? 集成,质量保障和分阶段可能全部是在同一箱
  • 任何在虚拟主机配置(不适用于CLI工作)
  • 一个静态命名文件(即,有些事情名为server.ini将无法正常工作)

Answer 1:

好吧,我终于想通了什么为这个事情。 真的只是需要一个基本的修改的AppKernel

应用程序/ AppKernel.php

public function registerContainerConfiguration(LoaderInterface $loader)
{

  // Symfony environment config
  $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');

  // Load server config, if it exists
  $parameters = parse_ini_file( __DIR__.'/config/parameters.ini', true );
  if ( $parameters && isset( $parameters['parameters']['server.env'] ) )
  {
    $serverConfig = __DIR__.'/config/server/'.$parameters['parameters']['server.env'].'.yml';
    if ( file_exists( $serverConfig ) )
    {
      $loader->load( $serverConfig );
    } else {
      error_log( 'Server config defined, but no config file found. Looked for ' . $serverConfig );
    }
  }
}

应用程序/配置/ parameters.ini

[parameters]
    # ...
    server.env="int"
    server.title="Integration"
    server.name="Int 1"

现在我可以只创建%server.env%.yml文件在app /配置/服务器/需要。

感谢那些阅读本 - 我原来想的东西复杂得多这使得一会儿这个简单的解决方案看不见的;)



文章来源: Symfony 2 - multiple server configuration