2013-01-15 172 views
1

我有一個網站作爲開發環境運行在本地主機上,並在生產服務器上運行。在CakePHP配置文件之間共享配置文件(routles.php,mail.php ...)

兩者和我之間的一些配置文件有一些差異,每次我必須更新服務器中的更改時,我必須小心不要覆蓋一些不同的文件。

我希望能夠通過爲每個環境創建正確配置的單個文件來簡化此過程。

我需要當前的讀取該文件在此配置文件:

  • 應用程序/配置/ email.php
  • 應用程序/配置/ routes.php文件

理想情況下,如果可能的話在:

  • 應用程序/供應商/ VENDOR_NAME/vendor_file.php

有沒有可能?

我試過使用Configure :: read和Configure :: write,但似乎無法在電子郵件設置中完成,例如public $smtp或路由文件。

Thaks。

回答

2

路由文件只是一個調用路由器的php文件。你可以非常簡單地把它分解成多個文件,並自行加載它們:然後

app/Config/ 
    routes.php 
    routes_dev.php 
    routes_production.php 

routes.php會加載正確的路線文件。

<?php 
if ($env == 'dev') { 
    include 'routes_dev.php'; 
} else { 
    include 'routes_production.php'; 
} 

電子郵件配置也只是一個PHP文件。你可以編寫一個函數來根據環境設置正確的默認配置。

class EmailConfig { 

    public function __construct() { 
    if ($env == 'dev') { 
     $this->default = $this->dev; 
    } 
    } 

    public $default = array(
     'host' => 'mail.example.com', 
     'transport' => 'Smtp' 
); 

    public $dev = array(
     'host' => 'mail2.example.com', 
     'transport' => 'Smtp' 
); 

} 

至於供應商文件,這是個案的基礎。

如果你有一個部署系統,可能會更好地爲每個環境(甚至可能是一個完整的配置目錄)實際擁有單獨的文件,並且在部署構建完成後重新命名它們,使得Cake和你的代碼都不那麼明智。

+0

謝謝!我爲email.php和routes.php文件做了同樣的處理。只有在路線的我沒有一個構造函數。我用'Configure :: read()'讀取一個變量,並在發佈的條件下使用它。 供應商庫的任何解決方案? – Alvaro

+0

是的,路由不是像EmailConfig那樣的類。供應商之一是棘手的,因爲很多取決於你加載他們的配置。也許概述一下它在你的問題中的作用。 – jeremyharris

+0

在這種情況下,我使用的供應商只有一個類。 – Alvaro

0

我用來處理這種情況的方式是將環境變量添加到apache虛擬主機配置中。

SetEnv cake_apps_path /var/www/apps/ 
SetEnv cake_libs_path /var/www/libs/ 

這讓我再拉$ _ SERVER [ 'cake_apps_path']和$ _ SERVER [ 'cake_libs_path']。然後每個開發人員可以在他自己的虛擬主機配置中設置自己的變量,然後將其添加到服務器的虛擬主機配置中,然後就完成了。每個開發人員都可以擁有自己的路徑。

相關問題