2013-09-26 93 views
10

我建立了一个Azure网站,并试图使用依赖于node-gyp的示例应用程序。Node.js应用程序无法在azure网站上部署

我得到这个:

emote: > [email protected] install C:\DWASFiles\Sites\node-canvas\VirtualDirectory0\site\wwwroot\node_modules\node-salesforce\node_modules\xml2json\node_modules\node-expat 
remote: > node-gyp rebuild 
remote: 
remote: 
remote: C:\DWASFiles\Sites\node-canvas\VirtualDirectory0\site\wwwroot\node_modules\node-salesforce\node_modules\xml2json\node_modules\node-expat>node "D:\Program Files (x86)\npm\1.2.18\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild 
remote: Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. 
remote: MSBUILD : error MSB3428: Could not load the Visual C++ component "VCBuild.exe". To fix this, 1) install the .NET Framework 2.0 SDK, 2) install Microsoft Visual Studio 2005 or 3) add the location of the component to the system path if it is installed elsewhere. [C:\DWASFiles\Sites\node-canvas\VirtualDirectory0\site\wwwroot\node_modules\node-salesforce\node_modules\xml2json\node_modules\node-expat\build\binding.sln] 
remote: gypnpm ERR! [email protected] install: `node-gyp rebuild` 
remote: npm ERR! `cmd "/c" "node-gyp rebuild"` failed with 1 
remote: npm ERR! 
remote: An error has occurred during web site deployment. 
remote: npm ERR! Failed at the [email protected] install script. 
remote: npm ERR! This is most likely a problem with the node-expat package, 
remote: npm ERR! not with npm itself. 
remote: npm ERR! Tell the author that this fails on your system: 
remote: npm ERR!  node-gyp rebuild 
remote: npm ERR! You can get their info via: 
remote: npm ERR!  npm owner ls node-expat 
remote: npm ERR! There is likely additional logging output above. 
remote: 
remote: npm ERR! System Windows_NT 6.2.9200 
remote: npm ERR! command "D:\\Program Files (x86)\\nodejs\\0.8.19\\node.exe" "D:\\Program Files (x86)\\npm\\1.2.18\\bin\\npm-cli.js" "install" "--production" 
remote: npm ERR! cwd C:\DWASFiles\Sites\node-canvas\VirtualDirectory0\site\wwwroot 
remote: npm ERR! node -v v0.8.19 
remote: npm ERR! npm -v 1.2.18 
remote: npm ERR! code ELIFECYCLE 
remote: npm 
remote: 
remote: Error - Changes committed to remote repository but deployment to website failed, please check log for further details. 
To https://[email protected]:443/node-canvas.git 
    ef20ef4..147856f master -> master 

人们是否有一个优雅的解决这个还是我需要旋转一个Linux虚拟机和部署这样的应用程序?

+0

您是否能够将项目发布到Azure?我使用节点画布模块 – psousa

回答

9

限制网站。请参阅http://azure.microsoft.com/en-us/documentation/articles/nodejs-use-node-modules-azure-apps/的本机模块部分。

解决方法/解决方法是在Windows开发盒中安装所有模块,并将node_modules作为git部署的一部分。

+2

,这不是一个很好的解决方案,自2013年10月以来的任何更新都有同样的问题? –

+1

根据[#1076](https://github.com/projectkudu/kudu/issues/1076)它应该工作正常。您可以使用的另一种方法是[VSTS Hosted Build](https://www.visualstudio.com/en-us/docs/build/apps/node/nodejs-to-azure),它具有所有必需的依赖关系(已测试过)作品完美)。 –

+0

记住在应用程序服务/网站上启用python,您正在安装:) – Hulvej

4

我最近成功部署了一个Node.js应用程序/ Sails应用程序,作为依赖于Grunt的Azure Web应用程序运行,因此也需要对node-gyp的支持。起初,我努力让node-gyp在连续部署上运行,而不包括node_modules文件夹,但最终我成功地实现了你希望称为“优雅解析”的目标。 这是必要的,我的步骤如下:

  1. 确保您使用的是稍微最新版本节点和NPM(远的如天青允许你这样做。在我来说,我使用的节点5.4 .0和NPM 3.3.12部署到Azure上有两种方式,我知道要做到这一点:

    • 应用程序设置:WEBSITE_NODE_DEFAULT_VERSION 5.4.0(或其他)
    • 的package.json文件:包括以下内容:在配置/ ENV/production.js文件

      "engines": {  
          "node": "5.4.0",  
          "npm": "3.3.12" 
      }, 
      
  2. 更改设置给咕噜更多的时间来丑化或什么的。 20多岁的默认值似乎是太低了许多应用程序在那里,但可能有更好的方法来解决这个问题:https://github.com/balderdashy/sails/issues/2691 我把:

    hookTimeout: 60000, // 60 seconds 
    
  3. 我用.deploymentdeploy.cmd/deploy.sh(取决于您的系统)文件来自定义Azure平台上的部署。我使用的导游是:http://www.cptloadtest.com/2013/12/03/Git-And-Grunt-Deploy-To-Windows-Azure.aspx

    编辑:看起来像我原来的命令来运行咕噜从deploy.cmd是不正确的,我不熟悉的bash脚本,对不起。我结束了对这个问题的脚本的一些修改:Deploying a NodeJS App to Azure Websites fails on installing NPM packages from pagages.json from deploy.cmd?
    使用这个脚本我的grunt任务运行在部署上。这里是我的脚本的修改部分。
    部署。CMD:

    :: Setup 
    :: -----   
    
    :: ... some default parts omitted 
    
    IF NOT DEFINED GRUNT_CMD (
        :: Install grunt 
        echo Installing Grunt 
        call npm --registry "http://registry.npmjs.org/" install grunt-cli 
        IF !ERRORLEVEL! NEQ 0 goto error 
    
        :: Locally just running "grunt" would also work 
    SET GRUNT_CMD=node "%DEPLOYMENT_SOURCE%\node_modules\grunt-cli\bin\grunt" 
    ) 
    
    goto Deployment 
    
    :: Utility Functions 
    :: ----------------- 
    
    :SelectNodeVersion 
    
    :: ... some default parts omitted 
    
    :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
    :Deployment 
    echo Handling node.js deployment. 
    echo %DEPLOYMENT_SOURCE% 
    
    echo 1. Select node version 
    call :SelectNodeVersion 
    
    echo 2. Install npm packages dev dependencies 
    IF EXIST "%DEPLOYMENT_SOURCE%\package.json" (
        pushd "%DEPLOYMENT_SOURCE%" 
        echo Cleaning NPM cache. 
        call !NPM_CMD! cache clean 
        call !NPM_CMD! install --development 
        IF !ERRORLEVEL! NEQ 0 goto error 
        popd 
    )   
    
    echo 4. Run grunt prod task 
    pushd %DEPLOYMENT_SOURCE% 
    call !GRUNT_CMD! --no-color prod 
    IF !ERRORLEVEL! NEQ 0 goto error 
    popd 
    
    echo 5. KuduSync 
    IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
        call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd" 
        IF !ERRORLEVEL! NEQ 0 goto error 
    ) 
    
    echo 6. Install npm packages production 
    IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
        pushd %DEPLOYMENT_TARGET% 
        call !NPM_CMD! install --production 
        IF !ERRORLEVEL! NEQ 0 goto error 
        popd 
    ) 
    
  4. 然后我就遇到了这个错误:ENOTSUP using Grunt这是值得庆幸的是最近解决:)
    所以,剩下的为我做的是改变了deploy.sh给出语法工作我deploy.cmd。所以以前运行咕噜deploy.cmd我包括:

    echo 3. Update erroneous glob dependency in Grunt 
    pushd "%DEPLOYMENT_SOURCE%\node_modules\grunt" 
    call :ExecuteCmd !NPM_CMD! install [email protected]^6.0.4 --save 
    IF !ERRORLEVEL! NEQ 0 goto error 
    popd 
    

我希望这有助于你们当中有些人在那里,但我知道,那一些我所面临的问题可能会得到解决使用最新版本的节点和npm。但是由于Azure不能提供最新版本,所以这对你们中的一些人可能仍然有帮助。

编辑:

关于:

  1. 节点的版本选择:

    我试图通过仅在设定的package.json它没有更改默认设置,选择节点版本应用程序设置(默认版本:4.2.3),我仍然得到以下错误:

    Node.js versions available on the platform are: 0.6.20, 0.8.2, 0.8.19, 0.8.26, 0.8.27, 0.8.28, 0.10.5, 0.10.18, 0.10.21, 0.10.24, 0.10.26, 0.10.28, 0.10.29, 0.10.31, 0.10.32, 0.10.40, 0.12.0, 0.12.2, 0.12.3, 0.12.6, 4.0.0, 4.1.0, 4.1.2, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 5.0.0, 5.1.1, 5.3.0, 5.4.0, 5.5.0. 
    Selected node.js version 5.4.0. Use package.json file to choose a different version. 
    Selected npm version 3.3.12 
    Updating iisnode.yml at D:\home\site\wwwroot\iisnode.yml 
    3. Install npm packages 
    npm WARN deprecated [email protected]: [email protected]<2.0.0 is no longer maintained. Upgrade to [email protected]^3.0.0 
    npm WARN deprecated [email protected]: DEPRECATED. See readme: https://github.com/gruntjs/grunt-lib-contrib 
    npm WARN deprecated [email protected]: [email protected]<2.0.0 is no longer maintained. Upgrade to [email protected]^3.0.0 
    > [email protected] preinstall D:\home\site\wwwroot\node_modules\.staging\sails-bbe9b0ace9f7789c8522238af14fe27a 
    > node ./lib/preinstall_npmcheck.js 
    
    Sails.js Installation: Checking npm-version successful 
    npm WARN prefer global [email protected] should be installed with -g 
    
    > [email protected] install D:\home\site\wwwroot\node_modules\fibers 
    > node build.js || nodejs build.js 
    
    
    D:\home\site\wwwroot\node_modules\fibers>if not defined npm_config_node_gyp (node "c:\Program Files (x86)\npm\3.3.12\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild --release) else (node rebuild --release) 
    Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch. 
        fibers.cc 
        coroutine.cc 
    ..\src\fibers.cc : fatal error C1902: Program database manager mismatch; please check your installation [D:\home\site\wwwroot\node_modules\fibers\build\fibers.vcxproj] 
    ..\src\coroutine.cc : fatal error C1902: Program database manager mismatch; please check your installation [D:\home\site\wwwroot\node_modules\fibers\build\fibers.vcxproj] 
    gyp ERR! build error 
    gyp ERR! stack Error: `msbuild` failed with exit code: 1 
    gyp ERR! stack  at ChildProcess.onExit (c:\Program Files (x86)\npm\3.3.12\node_modules\npm\node_modules\node-gyp\lib\build.js:270:23) 
    gyp ERR! stack  at emitTwo (events.js:87:13) 
    gyp ERR! stack  at ChildProcess.emit (events.js:172:7) 
    gyp ERR! stack  at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) 
    gyp ERR! System Windows_NT 6.2.9200 
    gyp ERR! command "D:\\Program Files (x86)\\nodejs\\4.2.3\\node.exe" "c:\\Program Files (x86)\\npm\\3.3.12\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--release" 
    gyp ERR! cwd D:\home\site\wwwroot\node_modules\fibers 
    gyp ERR! node -v v4.2.3 
    gyp ERR! node-gyp -v v3.0.3 
    Build failed 
    

    就像你可以看到它首先指出:

    Selected node.js version 5.4.0. Use package.json file to choose a different version. 
    

    根据的package.json文件。
    然而,后来在错误信息,这似乎已经改变了:

    gyp ERR! node -v v4.2.3 
    

    要我,为什么,因为在的package.json文件中的版本会出现此错误应该被覆盖在应用程序设置的默认并不明显。因此,要确保将两个设置设置为足够高的版本(不知道节点gyp问题何时解决,但5.4.0似乎工作正常!)。