2015-12-18 4 views
7

Ich habe einige Sites mit MongoDB zu Heroku bereitgestellt, aber dies ist das erste Mal, dass ich eine Website mit SQL erstellt und versucht habe, zu implementieren zu Azure, also vermisse ich wahrscheinlich etwas Offensichtliches.Ich kann keine Verbindung mit SQL Azure-Datenbank mit Sequelize, aber SQL Server auf localhost funktioniert

Ich habe eine Website auf meinem Dev-Computer mit Node.js, einer SQL Server-Datenbank und Sequelize als ORM entwickelt. Alles funktioniert gut, aber als ich versucht habe, Azure mit einer Verbindungszeichenfolge zu implementieren, kann ich keine Verbindung mit der SQL Azure-Datenbank herstellen. Ich kann SQL Server Management Studio verwenden, um eine Verbindung mit der leeren Datenbank in Azure herzustellen, daher bin ich sicher, dass meine Verbindungsinformationen korrekt sind.

Wenn ich zu Azure bereitstellen versuchte, habe ich versucht, mit der Verbindungszeichenfolge, dass Azure bietet:

var Sql = require('sequelize'); 
 
var sql = new Sql('Driver={SQL Server Native Client 11.0};Server=tcp:server.database.windows.net,1433;Database=databasename;[email protected];Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;');

Wenn ich versuche, mit dieser Zeichenfolge zu verbinden, die Fehler, die ich bekommen ist:

C:\Users\username\Documents\GitHub\event-site\node_modules\sequelize\lib\sequelize.js:110 
 
    options.dialect = urlParts.protocol.replace(/:$/, ''); 
 
            ^
 

 
TypeError: Cannot read property 'replace' of null 
 
    at new Sequelize (C:\Users\v-mibowe\Documents\GitHub\event-site\node_modules\sequelize\lib\sequelize.js:110:40) 
 
    at Object.<anonymous> (C:\Users\v-mibowe\Documents\GitHub\event-site\routes\db-routes.js:68:11) 
 
    at Module._compile (module.js:435:26) 
 
    at Object.Module._extensions..js (module.js:442:10) 
 
    at Module.load (module.js:356:32) 
 
    at Function.Module._load (module.js:311:12) 
 
    at Module.require (module.js:366:17) 
 
    at require (module.js:385:17) 
 
    at Object.<anonymous> (C:\Users\v-mibowe\Documents\GitHub\event-site\server.js:16:1) 
 
    at Module._compile (module.js:435:26) 
 
    at Object.Module._extensions..js (module.js:442:10) 
 
    at Module.load (module.js:356:32) 
 
    at Function.Module._load (module.js:311:12) 
 
    at Function.Module.runMain (module.js:467:10) 
 
    at startup (node.js:136:18) 
 
    at node.js:963:3

db-routes.js:68:11 ist die Verbindungszeichenfolge zur Datenbank.

Wenn ich versuche, meine Verbindung mit den folgenden zu konfigurieren, stürzt der Server nicht mehr ab oder gibt einen Fehler, aber keiner der Inhalte, die durch den Code im Schema erstellt werden sollen, wird erstellt. Dieser Code sieht wie folgt aus:

var Sql = require('sequelize'); 
 
var sql = new Sql('dbname', '[email protected]', 'password', { 
 
    host: 'server.database.windows.net', 
 
    dialect: 'mssql', 
 
    driver: 'tedious', 
 
    options: { 
 
    encrypt: true, 
 
    database: 'dbname' 
 
    }, 
 
    port: 1433, 
 
    pool: { 
 
    max: 5, 
 
    min: 0, 
 
    idle: 10000 
 
    } 
 
});

Meine ursprüngliche Verbindung zu meinem localhost (der gut arbeitet) sieht wie folgt aus:

var Sql = require('sequelize'); 
 
var sql = new Sql('dbname', 'username', 'password', { 
 
    host: 'localhost', 
 
    dialect: 'mssql', 
 

 
    pool: { 
 
    max: 5, 
 
    min: 0, 
 
    idle: 10000 
 
    } 
 
})

Vielen Dank im Voraus für alle Hilfe!

+0

Wenn ich es richtig verstanden beziehen kann, wird Ihre Anwendung auf Heroku und Ihre Datenbank in Azure ausgeführt wird, Recht? Hast du die Firewall überprüft? –

+0

@BrunoFaria Danke, dass du zu mir zurückkehrst. Nichts ist auf Heroku, die gesamte App läuft auf Azure. Ich habe nur Heroku erwähnt, weil ich zuvor noch nicht auf Azure eingesetzt habe und ich versuche, Dinge auf eine Art "Heroku" zu machen, wenn es in Azure anders geht. – CascadiaJS

+0

Ist die SQL Azure-Firewall für Azure-Dienste aktiviert? Andernfalls müssen Sie die Frontend-IP manuell hinzufügen. –

Antwort

6

zu verbinden, um mit Azure Sql Server mit ran langweilig zu verbinden, müssen wir zusätzliche Option: encrypt: true in Verbindung Fabrik. In Sequelize können wir dialectOption in Initialisierungsfunktion angeben:

var Sequelize = require('sequelize'); 
var sequelize = new Sequelize('dbname', 'username', 'passwd', { 
    host: 'hostname', 
    dialect: 'mssql', 
    pool: { 
    max: 5, 
    min: 0, 
    idle: 10000 
    }, 
    dialectOptions: { 
    encrypt: true 
    } 
}); 

Sie die similar issue in Sequelize Fragen Repo auf GitHub

+0

Danke für die Hilfe Gary Liu - MSFT, ich glaube, ich bin fast da.Mit der Antwort, die Sie gaben, kann ich mit meiner Verbindungszeichenfolge eine Verbindung zur Online-Azure-Datenbank herstellen, aber wenn ich sie auf Azure stelle, erhalte ich immer noch den Fehler: "Die Seite kann nicht angezeigt werden, weil ein interner Serverfehler aufgetreten ist." – CascadiaJS

+0

Normalerweise wird durch den Codefehler oder den Bereitstellungsfehler der 500-Fehler ausgelöst. Wenn Ihre Anwendung ohne "Sequelize" läuft, kann es sich um ein Code-Problem handeln. Sie können überprüfen, ob die Abhängigkeiten von node.js-Modulen mit Ihrer App hochgeladen wurden. Sie können das KUDU-Konsolen-Cmdlet Ihrer Site anmelden 'https: // .scm.azurewebsites.net/DebugConsole'. und über Node.js-Module mit Azure-Anwendungen können Sie auch auf https://azure.microsoft.com/en-us/documentation/articles/nodejs-use-node-modules-azure-apps/ –

+0

zugreifen, die Sie aktivieren können Diagnoseprotokolle Ihrer Website finden Sie unter https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/#enabling-diagnostic-logs. Und Sie können die ** Systemdatei ** Tier Logs über KUDU api 'https: // .scm.azurewebsites.net/api/dump' herunterladen –

1

Sie müssen die SQL Azure Firewall aktivieren, um Azure Services hinzuzufügen. in Ihrer App wird nicht in der Lage sein, mit SQL Azure,

+0

Danke ZeeMoussa, aber leider ist es bereits aktiviert – CascadiaJS

Verwandte Themen