2013-01-20 19 views
6

Sto provando a configurare msnodesql (in precedenza node-sqlserver) con il mio sito Web ospitato in azzurro e sto riscontrando alcuni problemi.Nure di Azure Problema: msnodesql Impossibile distribuire

In sostanza, la distribuzione non è riuscita in Azure. Credo che sia dovuto al fatto che NPM sta cercando di installare msnodesql sul server ma fallirà perché avrebbe bisogno di "node-gyp", Python e C++ 2010 installati (che non è presente sul lato azzurro). Ecco il messaggio di errore che sto vedendo

npm ERR! [email protected] install: `node-gyp rebuild` 
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1 
npm ERR! 
npm ERR! Failed at the [email protected] install script. 
npm ERR! This is most likely a problem with the msnodesql package, 
npm ERR! not with npm itself. 
npm ERR! Tell the author that this fails on your system: 
npm ERR!  node-gyp rebuild 
npm ERR! You can get their info via: 
npm ERR!  npm owner ls msnodesql 
npm ERR! There is likely additional logging output above. 

Sono stato hacking in questo errore per un po 'di tempo e nulla sembra risolvere il problema. La migliore risposta che ho ottenuto è quella di includere manualmente msnodesql all'interno di node_modules (come specificato da http://geekswithblogs.net/shaunxu/archive/2012/11/16/install-npm-packages-automatically-for-node.js-on-windows-azure-web.aspx). Sento che dovrebbe aggiustarlo ma purtroppo no. Ho anche provato a compilarlo contro il nodo x86 locale e anche solo a usare uno x86 precostruito (suggerito da http://geekswithblogs.net/shaunxu/archive/2012/09/18/node.js-adventure---when-node.js-meets-windows-azure.aspx).

Qualsiasi altro suggerimento sarebbe apprezzato qui.

Vale anche la pena notare che sta funzionando bene nel mio ambiente locale e posso prelevare i dati dal database SQL di Azure che ho creato (una volta che ho autorizzato il mio IP) utilizzando msnodesql in esecuzione su webmatrix ma eseguendo il database SQL di Azure.

Originariamente ho avuto un problema con il DB e il sito Web in Azure si trovano in diverse regioni, ma l'ho corretto.

risposta

0

Il motivo per cui questo non funziona è perché sta tentando di creare il modulo nativo quando si distribuisce. Non supportiamo lo edificio moduli nativi nei siti Web di Windows Azure. È comunque possibile distribuire il file binario e quindi funzionerà, ma non sarà necessario averlo nel pacchetto package.json. Segui questo post per ulteriori dettagli: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

+0

Ha senso.Penso che stavo andando giù un'altra strada prima. Ho avuto il non averlo all'interno della parte package.json, ma penso di averlo incluso nel mio ambiente. Buono a sapersi questo è il percorso da seguire, sono sicuro che questo risolverà il mio problema. –

+0

Penso di non dover avere qualcosa configurato all'interno del mio package.json. Cerca ancora di implementare in NPM anche se non lo ho incluso nel mio package.json e invece ho solo la cartella msnodesql all'interno del mio node_modules per il mio sito. –

+0

Ecco la mia package.json: '{ "name": "LISN", "versione": "0.1.0", "principali": "./server.js", "dipendenze": { " esprimere ": "*", "giada": "~ 0.22.0" }, "motori": { "nodo": "> = 0.6.14" }} ' –

5

Come menzionato da Glenn Block, il problema deriva dal tiraggio di Azure per creare il modulo nativo quando si distribuisce. Questo può accadere per alcuni motivi, forse non hai caricato il file binario, forse è il binario sbagliato, o forse la directory di implementazione è stata rovinata.

Il server di Azure richiede il driver a 32 bit per il nodo .6.

Quello che dovevo fare era FTP nel mio server azzurro ed eliminare tutto in/site/wwwroot/tranne per web.config. Probabilmente si può fare a meno di eliminare node_modules, ma poiché il comportamento era inaspettato, volevo ripulire tutto.

Quindi sono entrato nella directory del progetto Node sul mio computer locale e sono entrato nella directory node_module/msnodesql e ho cancellato tutto tranne la directory package.json e lib. Nella directory lib, ho creato directory separate per il binario per la mia macchina di sviluppo (64 bit .8) e blu, chiamate rispettivamente 64 e 32.

Ho poi modificato, sqlserver.native.js come segue

try { 
    module.exports = require('./32/sqlserver.node'); //Azure version 
} 
catch (e) { 
    try { 
     module.exports = require('./64/sqlserver.node'); //My local machine 
    } 
    catch (e) { 
     try { 
      module.exports = require('../build/Release/sqlserver.node'); 
     } 
     catch (e) { 
      console.error('Native sqlserver module not found. Did you remember to run node-gyp configure build?'); 
      throw e; 
     } 
    } 
} 

Il grande punto di fare qui è che, si prova a caricare tutte le versioni disponibili per accogliere per ogni possibilità di distribuzione che potrei avere, ma dare la priorità al server di Azure. Sulla mia macchina di sviluppo locale, non è stato possibile caricare il nodo da/32 poiché è il formato errato e torniamo a/64.

Scommetto che se ho messo un po 'di sforzo in questo, potrei facilmente tagliare ciò che viene cancellato al minimo, ma dopo aver sprecato ore e ore a risolvere questo, ne ho avuto abbastanza.

+0

Grazie !!! Ho sbattuto la testa contro il muro per ore su questo. Non avevo il problema di compatibilità 32/64-bit, ma ho ancora lo stesso errore. Ho pulito la mia directory node_modules/msnodesql lasciando solo package.json, directory lib e build directory, e alla fine ha funzionato. –

+0

Pulizia della directory msnodesql e eliminazione di tutto tranne che web.config in wwwroot ha funzionato! Grazie! –

+0

C'è un sacco di lavoro in corso per migliorare la storia generale del modulo nativo per Windows. Dovrebbe colpire presto le strade. Scusate ragazzi avete avuto così tanti problemi :-( –

Problemi correlati