7

我理解为什么我应该将我的数据库连接保留在parameters.yml文件中,但我还想为开发、阶段和生产环境设置额外的数据库连接以及不同的主机。我以为我可以用 来做到这一点config_dev.ymlconfig_test.ymlconfig_prod.yml结合config.yml,我错了吗?

parameters.yml我持有主数据库连接但我可以将它移动到配置中吗?

例子:config.yml

# Doctrine Configuration - notice there is no host defined here
doctrine:
    dbal:
      default_connection: blah
      connections:
        blah:
          driver:   pdo_pgsql
          port:     5432
          dbname:   blah
          user:     blah_user
          password: blah_pass
          charset:  UTF8
        foo:
          driver:   pdo_pgsql
          port:     5432
          dbname:   foo
          user:     foo_user
          password: foo_pass
          charset:  UTF8

例子:config_dev.yml

# Doctrine Configuration - Here I define the dev hosts
doctrine:
    dbal:
      connections:
        blah:
          host: blah_dev
        foo: 
          host: foo_dev

例子:config_test.yml

# Doctrine Configuration - Here I define the stage or QA hosts
doctrine:
    dbal:
      connections:
        blah:
          host: blah_stage
        foo: 
          host: foo_stage

例子:config_prod.yml

# Doctrine Configuration - Here I define the prod hosts
doctrine:
    dbal:
      connections:
        blah:
          host: blah_prod
        foo: 
          host: foo_prod

现在我也删除了其中的设置,parameters.yml但 Symfony / Doctrine 不喜欢这样。我错过了什么吗?我怎样才能设置像我一样的东西?

现在,如果我在中定义默认数据库连接,parameters.yml我可以连接到它,然后

parameters:
    database_driver: pdo_pgsql
    database_host: blah_prod
    database_port: 5432
    database_name: blah
    database_user: blah_user
    database_password: blah_pass

并在 config.yml

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"

但是现在我失去了我需要的多个数据库以及从 dev 到 stage 到 prod 数据库服务器的切换能力。

我必须缺少一些正在解决此问题的其他文档,任何帮助都会很棒。

我已经看到了 Multiple Database connections with Doctrine 的文档

但我想避免为每个开发、阶段和产品服务器添加三个数据库选项,如下所示parameters.yml

parameters:
    database_driver: pdo_pgsql
    database_host: blah_dev
    database_port: 5432
    database_name: blah
    database_user: blah_user
    database_password: blah_pass
    #database_driver2: pdo_pgsql
    database_host2: blah_stage
    #database_port2: 5432
    #database_name2: blah
    #database_user2: blah_user
    #database_password2: blah_pass
    #database_driver3: pdo_pgsql
    database_host3: blah_prod
    #database_port3: 5432
    #database_name3: blah
    #database_user3: blah_user
    #database_password3: blah_pass

(也许只是配置不同的主机?)

这看起来很难看,而且是 PITA,这仅适用于 blah 数据库,我必须为 foo 和我需要配置的任何其他数据库执行此操作。

4

2 回答 2

2

如果你的连接在每个环境中都是相同的,只是配置值不同,你应该使用参数配置文件。在 parameters.yml.dist 文件中定义您需要的环境变量,如下所示:

# parameters.yml.dist
parameters:
    database_host_1: blah
    database_host_2: blub
    ...

您的 config.ml 可能如下所示:

# config.yml
imports:
    - { resource: parameters.yml }
...
doctrine:
    dbal:
  default_connection: blah
  connections:
    blah:
      driver:   pdo_pgsql
      port:     5432
      host:     "%database_host_1%"
      dbname:   blah
      user:     blah_user
      password: blah_pass
      charset:  UTF8
    foo:
      driver:   pdo_pgsql
      port:     5432
      host:     "%database_host_2%"
      dbname:   foo
      user:     foo_user
      password: foo_pass
      charset:  UTF8

例如,如果您的 parameters.yml 丢失,您将在下次调用composer update时要求您提供数据库主机名。

如果您想将所有配置保存在单独的文件中,您应该在 config_XXX.yml 文件的开头添加以下内容:

# config_XXX.yml
imports:
    - { resource: config.yml }
    - { resource: parameters_XXX.yml }

将 XXX 替换为您的环境。为每个环境创建一个 parameters_XXX.yml 并在其中为您的主机设置配置参数,就像在默认 parameters.yml 文件中一样。

# parameters_XXX.yml
parameters:
    database_host_1: blahInXXXEnv
    database_host_2: blubInXXXEnv
    ...
于 2016-03-16T18:38:30.013 回答
0

我认为没有理由使用不同的 prod 和 dev 参数配置文件。您可以使用特定的parameters.yml.dist

在您的 PC 上使用所有已定义的连接文件。

多个连接并与它们一起工作:

于 2012-11-30T14:58:37.507 回答