2015-12-18 9 views
7

Ho installato alcuni siti su Heroku con MongoDB, ma questa è la prima volta che ho creato un sito con SQL e ho provato a distribuire ad Azure, quindi probabilmente mi manca qualcosa di ovvio.Impossibile connettersi al database SQL Azure con sequelize, ma SQL Server su localhost funziona bene

Ho sviluppato un sito Web sulla mia macchina di sviluppo utilizzando Node.js, un database SQL Server e Sequelize come ORM. Tutto funziona correttamente, ma quando ho provato a distribuire in Azure con una stringa di connessione non riesco a connettermi con il database SQL Azure. Posso usare SQL Server Management Studio per connettermi con il database vuoto su Azure, quindi sono sicuro che le mie informazioni di connessione siano corrette.

Quando ho cercato di distribuire a Azure, ho provato con la stringa di connessione che Azure fornisce:

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;');

Quando provo a connettersi con questa stringa, l'errore che ottengo è:

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 è la stringa di connessione al db.

Quando si tenta di configurare la mia connessione con quanto segue, il server non si blocca più o genera un errore, ma nessuno dei contenuti che dovrebbero essere creati dal codice nello schema viene creato. Quel codice simile a questo:

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 
 
    } 
 
});

La mia connessione originale al mio localhost (che funziona bene) si presenta così:

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

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

Grazie in anticipo per tutto l'aiuto!

+0

Se ho capito bene, l'applicazione è in esecuzione sul Heroku e il database in Azure, destra? Hai controllato il firewall? –

+0

@BrunoFaria Grazie per avermi contattato. Niente è su Heroku, l'intera App è in esecuzione su Azure. Ho solo menzionato Heroku, perché non mi sono mai distribuito su Azure e potrei provare a fare le cose in un modo "Heroku" quando dovrebbe essere fatto in modo diverso in Azure. – CascadiaJS

+0

Il firewall SQL Azure è selezionato per i servizi di Azure? Altrimenti, devi aggiungere manualmente l'ip del frontend. –

risposta

6

Per connettersi al server Azure Sql con corse noiose, è necessario impostare l'opzione aggiuntiva: encrypt: true in connessione factory. In Sequelize, possiamo specificare dialectOption in funzione di inizializzazione:

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 
    } 
}); 

è possibile consultare la similar issue in del Sequelize temi pronti contro termine su GitHub

+0

Grazie per l'aiuto Gary Liu - MSFT, penso di essere quasi arrivato.Con la risposta che hai dato, sono in grado di collegarmi al database azzurro online con la mia stringa di connessione, ma quando eseguo il deploy in azzurro ottengo ancora l'errore: "La pagina non può essere visualizzata perché si è verificato un errore interno del server." – CascadiaJS

+0

In genere, l'errore del codice o l'errore di distribuzione solleverà l'errore 500. Se la tua applicazione funzionerà bene senza 'sequelize', potrebbe trattarsi di un problema di codice, puoi verificare se le dipendenze dei moduli node.js sono state caricate con la tua app, puoi accedere al cmdlet della console KUDU del tuo sito, quale URL dovrebbe essere 'https: // .scm.azurewebsites.net/DebugConsole'. e sui moduli Node.js con le applicazioni di Azure, è possibile fare riferimento a https://azure.microsoft.com/en-us/documentation/articles/nodejs-use-node-modules-azure-apps/ –

+0

in aggiunta, è possibile abilitare registri diagnostici del tuo sito, fai riferimento a https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/#enabling-diagnostic-logs per ulteriori informazioni. E puoi scaricare il ** file di sistema ** log di livello tramite KUDU api 'https: // .scm.azurewebsites.net/api/dump' –

1

È necessario abilitare il Firewall di SQL Azure per aggiungere servizi di Azure. in non la tua App non sarà in grado di comunicare con SQL Azure,

+0

Grazie ZeeMoussa, ma sfortunatamente è già abilitato – CascadiaJS