2009-06-29 7 views
6

Ich bin ein RoR-Entwickler, aber ich arbeite derzeit mit CakePHP für ein Projekt, wo ich den Server nicht zwicken kann. Auf meinem Rails-Produktionsserver ist Passenger so eingestellt, dass automatisch die "Production" -Umgebung verwendet wird, wodurch die lokale App-Einrichtung überschrieben wird. Ich würde gerne meine CakePHP-App einrichten, um das Gleiche zu tun. Wie erreichst du das normalerweise mit CakePHP? Richten Sie einen Domain-Parser ein oder behalten Sie einfach core.php und database.php außerhalb der Versionskontrolle? Vielen Dank im Voraus, DavideWie konfiguriere ich CakePHP, um meine Entwicklungs-/Produktionsumgebungen zu erkennen, oder behalte ich die Konfigurationsdateien einfach aus der Versionskontrolle heraus?

Antwort

11

Wenn ich die Frage richtig verstanden habe, könnte dies das, was Sie brauchen:

Automatically choose database connections in CakePHP

Kurz gesagt, überschreiben die DATABASE_CONFIG Konstruktor:

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

Perfect, genau waht ich suchte – nutsmuggler

+0

Glad diesem Artikel werden Sie geholfen :) hinterlassen Sie bitte Feedback – Eddie

+1

Link nicht mehr funktioniert. In der Zukunft ist es eine gute Idee, die wichtigen Details aus einem Link zu zitieren, nur für den Fall, dass dies passiert. – BMitch

1

Sie könnten nur eine zusätzliche Datei erstellen, die die einzelne Configure::write('debug', 0) * Richtlinie hält, Import, dass es in der core.php Datei und hält aus Versionskontrolle. Beste aus beiden Welten.

* oder was sonst müssen Sie

1

Für die Datenbank ändern, können Sie die lokale und Produktionsverbindungseinstellungen einrichten und dann die Datei app/app_model.php und beinhalten die Linie erstellen:

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

Dann könnten Sie die Datei app/app_controller.php erstellen und die Domänen analysieren und ihnen mitteilen, welche dbconfig verwendet werden soll und welche anderen core.php-Einstellungen Sie verwenden, indem Sie Configure :: write verwenden.

7

Es könnte besser sein, die prod zu definieren/dev in bootstrap.php. Auf diese Weise können Sie die Konstante in der gesamten App wiederverwenden.

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

Das ist im Grunde, was ich mache, aber ich mache es ein Niveau in core.php. Ich habe dort eine Konstante namens "APPLICATION_ENV" gesetzt, damit ich sie an anderer Stelle im Code referenzieren kann und auch eine umgebungsspezifische Konfigurationsdatei laden kann, wo ich Konstanten (zB config-Werte) für Dinge wie Datenbank-Host, API-Schlüssel usw. definiere. –