2009-06-29 4 views
6

Je suis un développeur RoR, mais je travaille actuellement avec CakePHP pour un projet où je ne peux pas modifier le serveur. Dans mon serveur de production Rails, Passenger est configuré pour utiliser automatiquement l'environnement "Production", remplaçant la configuration de l'application locale. Je voudrais configurer mon application cakephp pour faire la même chose. Comment faites-vous habituellement cela avec CakePHP? Avez-vous mis en place un analyseur de domaine, ou vous gardez simplement core.php et database.php hors du contrôle de version? Merci à l'avance, DavideComment configurer CakePHP pour détecter mes environnements de développement/production ou est-ce que je garde les fichiers de configuration hors contrôle de version?

Répondre

11

Si je comprends bien la question, cela pourrait être la chose dont vous avez besoin:

Automatically choose database connections in CakePHP

En bref, passer outre le constructeur DATABASE_CONFIG:

class DATABASE_CONFIG 
{ 
    //initalize variable as null 
    var $default=null; 

    //set up connection details to use in Live production server 
    var $prod = 
     array(
      // ... 
     ); 

    // and details to use on your local machine for testing and development 
    var $dev = 
     array(
      // ... 
     ); 

    function __construct() 
    {  
     if(isset($_SERVER['SERVER_NAME'])){ 
      switch($_SERVER['SERVER_NAME']){ 
       case 'digbiz.localhost': 
        $this->default = $this->dev; 
        break; 
       case 'digbiz.example.com': 
        $this->default = $this->prod; 
        break; 
      } 
     } 
     else // we are likely baking, use our local db 
     { 
      $this->default = $this->dev; 
     } 
    } 
} 
+0

parfait, exactement waht je cherchais – nutsmuggler

+0

cet article, vous Glad aidé :) s'il vous plaît laisser des commentaires – Eddie

+1

lien ne fonctionne plus. Dans le futur, c'est une bonne idée de citer les détails importants d'un lien au cas où cela se produirait. – BMitch

1

Vous pouvez simplement créer un fichier supplémentaire qui détient la seule Configure::write('debug', 0) * directive, l'importation que dans le fichier core.php et le garder hors de contrôle de version. Le meilleur des deux mondes.

* ou tout ce que vous devez changer

1

Pour la base de données, vous pouvez configurer les paramètres locaux et de connexion de production, puis créer l'application fichier/app_model.php et inclure la ligne:

class AppModel extends Model 
{ 
    var $useDbConfig = 'production'; 
} 

Ensuite, vous pouvez créer le fichier app/app_controller.php et analyser les domaines et lui dire quel dbconfig utiliser et d'autres paramètres core.php en utilisant Configure :: write.

7

Il pourrait être préférable de définir la prod/dev dans bootstrap.php. De cette façon, vous pouvez réutiliser la constante à travers l'application.

bootstrap.php:

define('IS_PROD',(isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] == 'cubismedia.com') ? true : false); 

database.php:

function __construct() { 
     if (IS_PROD) { 
      $this->default = $this->prod; 
     } else { 
      $this->default = $this->dev; 
     } 
    } 

//development 
public $dev = array(
    //db settings 
); 

//production 
public $prod = array(
    //db settings 
); 
+1

C'est fondamentalement ce que je fais, mais je le fais un niveau dans core.php. Je mets ici une constante appelée "APPLICATION_ENV" pour pouvoir le référencer ailleurs dans le code et charger un fichier de configuration spécifique à l'environnement où je définis des constantes (les valeurs de config fonctionneraient aussi) pour des choses comme l'hôte de base de données, les touches api, etc. –

Questions connexes