2012-11-30 52 views
7

我明白爲什麼我應該保留我的數據庫連接在parameters.yml文件中,但我也想設置其他數據庫連接以及不同的主機開發,舞臺和刺激環境。我以爲我可以用config_dev.ymlconfig_test.ymlconfig_prod.ymlconfig.yml這樣做,我錯了嗎?與數據庫連接的parameters.yml和config_(dev | stage | prod).yml混淆

parameters.yml我主持數據庫連接,但我可以將它移動到配置(S)而不是?

實施例: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數據庫服務器的能力。

我必須丟失一些額外的文件,這是處理,任何幫助將是偉大的。

我已經看到了多個數據庫連接文件與學說

但我想,以避免添加三個數據庫選項下面一樣爲每個開發,階段和生產線服務器(收費)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和我需要配置的任何其他數據庫執行此操作。

回答

0

我沒有看到有理由使用不同的產品和開發參數配置文件。 你可以在你的電腦使用特定parameters.yml.dist

文件,所有定義的連接。

多connetions,並與他們合作:

+2

謝謝,我已經看過你建議的文檔,但它仍然不能幫助我的情況。爲什麼我要這個設置的原因。 1)我有多個數據庫服務器,2)我有多個環境(dev,stage,prod,QA)和3)我想輕鬆地定義/配置所有這些,以便其他人(無技術團隊)不需要或不需要有能力做出這些改變。還有其他建議嗎? –

+5

也許你只需要在config.yml刪除 進口: - {資源:parameters.yml} 並添加config_dev.yml和config_prod.yml 進口: - {資源:parameters_dev.yml}或 - {資源:parameters_prod.yml} – nvvetal

2

如果你的連接是在每個環境相同,但唯一的配置值是不同的,你應該使用的參數-configuration文件。定義環境變量,你需要的,在這樣的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丟失,例如,您將在下次撥打作曲者更新時詢問數據庫主機名。

如果你想保存在單獨的文件所有的配置,你應該在你的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 
    ...