2013-09-26 1 views
10

Я создал сайт Azure, и я пытаюсь использовать пример приложения, основанного на node-gyp.Приложение node.js с узлом-gyp не удается развернуть на лазурном сайте

Я получаю это:

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 

У людей есть изящное разрешение на это, или мне нужно раскрутить Линукс VM и развернуть приложение, как это?

+0

Вы смогли опубликовать свой проект на Azure? У меня такая же проблема, используя модуль узла-холста – psousa

ответ

9

Ограничение веб-сайтов. См. Раздел собственных модулей http://azure.microsoft.com/en-us/documentation/articles/nodejs-use-node-modules-azure-apps/.

Обходное решение/решение - установить все модули в окне Windows dev и включить node_modules в качестве части развертывания git.

+2

, который не является хорошим решением, любые обновления с октября 2013 года? –

+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 app/Sails, работающее как веб-приложение Azure, которое полагается на Grunt и поэтому нуждается в поддержке node-gyp. Сначала я изо всех сил пытался получить node-gyp для непрерывного развертывания без включения папки node_modules, но, в конце концов, я преуспел в том, что вы, надеюсь, называете «грациозным разрешением». шагов, которые были необходимы для меня являются:

  1. Убедитесь, что вы используете несколько до даты версии узла и НМП (насколько Azure позволяет сделать так:. В моем случае я использовал узел 5.4 . +0,0 и НПМ 3.3.12 Развертывание на Azure есть два пути я знаю, чтобы сделать это:

    • настройки приложения: WEBSITE_NODE_DEFAULT_VERSION 5.4.0 (или любой другой)
    • Package.json файл: Включить следующее:

      "engines": {  
          "node": "5.4.0",  
          "npm": "3.3.12" 
      }, 
      
  2. Изменение настроек в конфигурации/ENV/production.js файл, чтобы дать рубаки больше времени, чтобы уродовать или любой другой. Значение по умолчанию 20-х годов, кажется, слишком мало для многих приложений там, однако там могут быть более эффективные способы решения этой проблемы: https://github.com/balderdashy/sails/issues/2691 я ставлю:

    hookTimeout: 60000, // 60 seconds 
    
  3. Я использовал .deployment и deploy.cmd/deploy.sh (в зависимости от вашей системы), чтобы настроить развертывание на платформе Azure. Руководство я использовал: http://www.cptloadtest.com/2013/12/03/Git-And-Grunt-Deploy-To-Windows-Azure.aspx

    EDIT: выглядит как мои первоначальные команды для запуска Grunt из deploy.cmd неверен, я не знаком с Баш сценариями, извините. В результате я использовал сценарий из этого вопроса с некоторыми изменениями: 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 не в курсе последних версий, это может быть полезно для некоторых из вас.

EDIT:

Относительно:

  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, похоже, работает нормально!).