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
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;
}
}
}
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
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.
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
);
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. –
Perfect, genau waht ich suchte – nutsmuggler
Glad diesem Artikel werden Sie geholfen :) hinterlassen Sie bitte Feedback – Eddie
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