【问题标题】:Environment variables not being set when deploying to Azure Cloud Service via Visual Studio通过 Visual Studio 部署到 Azure 云服务时未设置环境变量
【发布时间】:2016-01-27 15:21:23
【问题描述】:

Azure 云服务中的环境变量存在一些问题。 我正在尝试通过 ServiceDefention.csdef 文件在部署期间设置“NODE_ENV”环境变量。

我的 node.js 应用程序将通过 process.env.NODE_ENV 读取该变量。

这方面的文档不是很广泛(因为它似乎是一件非常简单的事情)但这是我一直关注的:link1link2

我拥有的 ServiceDefinition 文件部分如下:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="userApiServer" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WebRole name="userApiWebRole" vmsize="Large">
    ...
    <Runtime>
      <Environment>
        <Variable name="NODE_ENV" value="dev" />
      </Environment>
    </Runtime>
    ...
  </WebRole>
</ServiceDefinition>

我尝试了很多变化;在启动任务下而不是在运行时设置环境变量,使用 xpaths 来配置设置,但它们似乎并没有为我创建环境变量。

在使用 xpaths 方法时,我确实发现我的配置设置是在实例上创建的,因此正在读取定义文件。

我是否缺少任何常见(或不常见)的陷阱或隐藏的细节,因为对于一些看似非常简单的事情,我遇到了很多麻烦。

【问题讨论】:

    标签: node.js visual-studio azure deployment azure-cloud-services


    【解决方案1】:

    您可以在 web.config 或 iisnode.yml 中进行编辑。看看这个答案

    Set Node.js Environment Variable (NODE_ENV) in iisnode to Production/Development/Test

    【讨论】:

      【解决方案2】:

      正如@AIDAN CASEY所说,在web.configiisnode.yml中设置node_env变量是正确的。

      此外,我们可以利用纯 Node.js 第 3 部分模块 dotenv。只需要创建一个名为.env 的文件,内容如下:

      node_env=production
      

      在 Nodejs 脚本中包含并初始化模块:

      require('dotenv').load();
      

      【讨论】:

      • 抱歉后续问题,但是在创建环境变量时使用 WebConfig 时是否可以使用 xpaths(或类似的)来拉入配置设置;类似于ServiceDefinition中的实现方式?如果是这样,这种方法会在配置改变时动态改变环境变量吗?
      • 如果您的意思是要在 .cscfg.csdef 文件中配置自定义设置,并将在 node.js 运行时设置,那么您可以在 Nodejs 脚本中获取设置。我认为您可以在 azure sdk 中为节点利用 azure.RoleEnvironment。但它仅在 Worker Role 中可用。
      猜你喜欢
      • 2016-12-10
      • 2016-04-08
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多