将AzureServiceProject Node.js发布到Windows Server 2012

时间:2012-12-23 19:09:55

标签: node.js azure azure-powershell

我正在尝试使用Powershell“Publish-AzureServiceProject”cmdlet将Node.js包发布到Azure。

使用默认的osFamily =“2”(Windows Server 2008 R2),它按预期工作,但是当我使用osFamily =“3”(Windows Server 2012)发布时,我收到以下错误:

  

上传的软件包所需的名为NetFx35的功能是   在为部署选择的OS *中不可用。

显然我没有使用.Net,但默认情况下,3.5是阻止我上传软件包的。

要指定.Net 4.5我读到我需要创建一个包含以下内容的roleproperties.txt文件:

  

TargetFrameWorkVersion = 4.5版

并通过/ rolePropertiesFile将其传递给cspack。

但是,由于我自己并没有调用cspack,我如何通过Publish-AzureServiceProject将该选项传递给cspack?或者还有另一种解决方法吗?


目前我的ServiceDefinition看起来像这样:

<?xml version="1.0"?>
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Foo" upgradeDomainCount="1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WorkerRole name="Bar">
    <Imports>
      <Import moduleName="RemoteForwarder" />
      <Import moduleName="RemoteAccess" />
    </Imports>
    <Startup>
      <Task commandLine="setup_worker.cmd &gt; log.txt" executionContext="elevated">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="RUNTIMEID" value="node" />
          <Variable name="RUNTIMEURL" value="http://nodertncu.blob.core.windows.net/node/0.6.20.exe" />
        </Environment>
      </Task>
    </Startup>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="tcp" port="80" />
    </Endpoints>
    <Runtime>
      <Environment>
        <Variable name="PORT">
          <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/Endpoints/Endpoint[@name='HttpIn']/@port" />
        </Variable>
        <Variable name="EMULATED">
          <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
        </Variable>
      </Environment>
      <EntryPoint>
        <ProgramEntryPoint commandLine="runnode.cmd" setReadyOnProcessStart="true" />
      </EntryPoint>
    </Runtime>
  </WorkerRole>
</ServiceDefinition>

2 个答案:

答案 0 :(得分:1)

由于Node SDK在不使用cspack.exe的情况下构建软件包(以保持独立于平台的架构),因此无法使用“/ rolePropertiesFile”选项。

作为解决方法,您可以使用运行时 - &gt;设置targetFrameworkVersion设置。 EntryPoint - &gt; NetFxEntryPoint - &gt;您的ServiceDefinition中的targetFrameworkVersion =“v4.5”,如下例所示:

<?xml version="1.0"?>
<ServiceDefinition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NodeAvkash" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="ExtraSmall">
    <Imports />
    <Startup>
      <Task commandLine="setup_web.cmd &gt; log.txt" executionContext="elevated">
        <Environment>
          <Variable name="EMULATED">
            <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
          </Variable>
          <Variable name="RUNTIMEID" value="node;iisnode" />
          <Variable name="RUNTIMEURL" value="http://nodertncu.blob.core.windows.net/node/0.6.20.exe;http://nodertncu.blob.core.windows.net/iisnode/0.1.21.exe" />
        </Environment>
      </Task>
    </Startup>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <Runtime executionContext="elevated">
      <EntryPoint>
        <NetFxEntryPoint assemblyName="WebRole1.dll" targetFrameworkVersion="v4.5" />
      </EntryPoint>
    </Runtime>
  </WebRole>
</ServiceDefinition>

答案 1 :(得分:1)

目前,您需要做一些工作才能让OSFamily = 3使用非.Net角色。基本上,你需要自己运行cspack来创建一个包,并指定一个roleProperties文件,允许你定位.Net 4.5(是的,即使你根本不使用.Net,你需要说服cspack工具你'重新使用.Net 4.5)。

以下是步骤:

  1. 使用Web角色创建新的节点项目。
  2. 修改cscfg以设置OS Family = 3。
  3. 将以下roleproperties.txt放入服务的根目录。
  4. 启动“Windows Azure命令提示符”,然后转到服务根文件夹。
  5. 运行此命令:cspack ServiceDefinition.csdef / role:WebRole1; WebRole1 / sites:WebRole1; Web; WebRole1 /rolePropertiesFile:WebRole1;RoleProperties.txt /out:package.cspkg
  6. 登录门户并创建服务/手动上传cspkg
  7. roleproperties.txt的内容:

    TargetFrameworkVersion=v4.5