6

Azure でホストされているサイトで msnodesql (以前の node-sqlserver) をセットアップしようとしていますが、いくつかの問題が発生しています。

基本的に、Azure 内で展開に失敗しました。これは、NPM がサーバーに msnodesql をインストールしようとしているが、「node-gyp」、Python、および C++ 2010 がインストールされている (Azure 側には存在しない) 必要があるため失敗することが原因であると考えられます。これが私が見ているエラーメッセージです

npm ERR! msnodesql@0.2.0 install: `node-gyp rebuild`
npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1
npm ERR! 
npm ERR! Failed at the msnodesql@0.2.0 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.

私はしばらくこのエラーをハッキングしてきましたが、何も修正されていないようです。私が得た最良の答えは、msnodesql を node_modules 内に手動で含めることです ( http://geekswithblogs.net/shaunxu/archive/2012/11/16/install-npm-packages-automatically-for-node.jsで指定されているように) -on-windows-azure-web.aspx )。私はそれを修正する必要があるように感じますが、残念ながらそうではありません。また、ローカルの x86 ノードに対してコンパイルし、ビルド済みの x86 ノードを使用してコンパイルしようとしました ( http://geekswithblogs.net/shaunxu/archive/2012/09/18/node.js-adventure---when-nodeで提案)。 .js-meets-windows-azure.aspx )。

ここで他の提案をいただければ幸いです。

また、注目に値するのは、それが私のローカル環境で問題なく動作しており、webmatrix 内で実行されているが Azure SQL DB にアクセスしている msnodesql を使用して (IP をホワイトリストに登録した後で) 作成した SQL Azure DB からデータを取得できることです。

元々、Azure の DB と Web サイトが異なるリージョンにあるという問題がありましたが、それを修正しました。

4

2 に答える 2

5

Glenn Block が述べたように、この問題は、デプロイ時にネイティブ モジュールをビルドするために Azure がタイリングすることに起因します。これは、いくつかの理由で発生する可能性があります。バイナリをアップロードしていない、間違ったバイナリである、または展開ディレクトリが台無しになっている可能性があります。

Azure サーバーは、Node.6 用の 32 ビット ドライバーを必要としています。

私がしなければならなかったのは、Azure サーバーに FTP で接続し、web.config を除く /site/wwwroot/ 内のすべてを削除することでした。おそらく node_modules を削除するだけで済むでしょうが、動作が予想外だったので、すべてをクリーンアップしたかったのです。

次に、ローカル マシンの Node プロジェクト ディレクトリに移動し、node_module/msnodesql ディレクトリに移動して、package.json と lib ディレクトリ以外のすべてを削除しました。lib ディレクトリに、開発マシン (64 ビット .8) と azure のバイナリ用に別々のディレクトリを作成し、それぞれ 64 と 32 と呼びました。

次に、次のように sqlserver.native.js を変更しました

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

ここで重要な点は、デプロイのあらゆる可能性に対応するために、利用可能なすべてのバージョンをロードしようとしていますが、Azure サーバーを優先するということです。私のローカル開発マシンでは、/32 の形式が間違っているためノードをロードできず、/64 にフォールバックしました。

これに少し力を入れれば、削除されるものを簡単に最小限に抑えることができたに違いありませんが、これを解決するために何時間も無駄にした後、私は十分に持っていました.

于 2013-02-08T14:51:10.153 に答える
0

これが失敗する理由は、デプロイ時にネイティブ モジュールをビルドしようとしているためです。Windows Azure Web サイトでのネイティブ モジュールの構築はサポートされていません。ただし、バイナリをデプロイすると機能しますが、package.json に含める必要はありません。詳細については、この投稿に従ってください: http://blogs.msdn.com/b/sqlphp/archive/2012/06/08/introducing-the-microsoft-driver-for-node-js-for-sql-server.aspx

于 2013-01-20T00:35:07.667 に答える