gpt4 book ai didi

php - 与数据库连接的 parameters.yml 和 config_(dev|stage|prod).yml 混淆

转载 作者:可可西里 更新时间:2023-11-01 12:59:13 25 4
gpt4 key购买 nike

我理解为什么我应该将我的数据库连接保存在 parameters.yml 文件中,但我还想设置额外的数据库连接以及用于开发、阶段和生产环境的不同主机。我想我可以将 config_dev.ymlconfig_test.ymlconfig_prod.ymlconfig.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%"

但现在我失去了我需要的多个数据库以及从开发数据库服务器切换到阶段数据库服务器到生产数据库服务器的能力。

我一定是遗漏了一些正在解决这个问题的额外文档,任何帮助都会很棒。

我看过有关 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 和我需要配置的任何其他数据库执行此操作。

最佳答案

如果您的连接在每个环境中都相同,只是配置值不同,您应该使用参数配置文件。在 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
...

关于php - 与数据库连接的 parameters.yml 和 config_(dev|stage|prod).yml 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13647245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com