2017-06-12 2 views
0

Ich kann eine Verbindung zu einer von Google Cloud gehosteten mySQL-Datenbank von einem lokalen Server herstellen (über den Proxy), bin aber nicht dazu in der Lage von Google App Engine. Die App Engine-Instanz und die Google Cloud mySQL-Instanz befinden sich im selben Bereich, aber ich habe gelesen, dass dies bei MySQL der zweiten Generation ohnehin kein Problem sein sollte.Verbindung mit einer MySQL-Instanz der zweiten Generation aus einer App Engine-Anwendung nicht möglich (flexible Umgebung) PHP

Vom lokalen Server kann ich eine Verbindung herstellen und einen einfachen Befehl senden, um eine Datenbank zu manipulieren.

Wenn ich den Code auf Google App Engine bereitstellen es auf dem folgenden Befehl fehlschlägt:

$pdo = new PDO($this->dsn, $this->user, $this->password); 

Wo:

$ this-dsn ist wie folgt definiert:

mysql:host=127.0.0.1;port=3306;unix_socket=/cloudsql/<Project ID>:<Location>:<Instance>;dbname=<Database Name>" 

Benutzer und Das Passwort wird wie auch der Name der Instanzverbindung definiert und validiert, da ich mich vom lokalen Server aus anmelden und die mySQL-Datenbank erfolgreich bearbeiten kann. Der obige Text innerhalb <> Begrenzer sind Beschreibungen der Werte, die im PHP-Code verwendet werden (ersetzt, um vertrauliche Informationen zu verschleiern).

ich versucht, von diesem Befehl jede Ausnahme zu fangen, wie folgt:

try { 
    $pdo = new PDO($this->dsn, $this->user, $this->password); 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

Leider, ich jede Nachricht auf dem Web-Client, einfach die allgemeine Browser Ausnahme Ausgabe gedruckt nicht bekam. Alle Tipps zur Navigation zu der VM, die von Google App Engine instanziiert wird, um syslog- oder andere Tipps zum Debuggen von Servercode (Google Cloud) anzuzeigen, wären ebenfalls hilfreich.

Mein app.yaml sieht wie folgt aus:

runtime: php 
env: flex 

runtime_config: 
    document_root: web 

beta_settings: 
    cloud_sql_instances: "<Project ID>:<Location>:<Instance>" 

Auch dies alles funktioniert gut aus dem lokalen Server die Cloud-Proxy-Skript verwenden, aber nur nicht spielen, wenn Google Cloud zum Einsatz. Ich habe das php-Bookshelf-Tutorial genau verfolgt und dann einen Großteil des Codes entfernt, um so weit zu kommen - immer die geistige Gesundheit durch Tests auf dem lokalen Server zu überprüfen.

Vielen Dank.

+0

BTW - ich bin in der Lage, auf eine Instanz der VM zu protokollieren und ich habe eine Steckdose unter/cloudsql mit dem richtigen Format erstellt sehen. Das Syslog zeigt mehrere "GAE" -Umgebungsvariablen, die vielversprechend aussehen. Keine Fehlermeldung, die ich finden kann, aber ich bin nicht ganz klar, wonach ich suche. –

Antwort

0

Ich denke, Sie folgende für die dsn verwenden sollten:

mysql:unix_socket=/cloudsql/<Project ID>:<Location>:<Instance>;dbname=<Database Name> 
+0

Danke. Ich habe das Problem anders gelöst. Ich begann mit dem "standardmäßigen" App Engine-Flow und hatte mit dieser Version keine Probleme, mich mit dem mySQL-Server zu verbinden. Vielen Dank –

Verwandte Themen