如果运行导出EMBER_ENV,则忽略给予ember的环境参数

时间:2014-11-13 13:32:26

标签: node.js bash

当我在bash文件中运行它时,ember应用程序没有收到参数environment

#!/bin/bash

# create nginx.conf
echo "Create nginx.conf from nginx.conf.erb"
export `cat ./.env`
erb ./config/nginx.conf.erb > ./config/nginx.conf

./node_modules/ember-cli/bin/ember serve --environment=acceptance

我认为它与导出功能有关。当我在导出之前放入ember serve命令时,它可以工作。

.env文件看起来像这样

EMBER_ENV=development

在Mac OS 10.10(Yosemite)上运行bash 3.2

编辑:我更改了问题,因为它没有所有相关代码

1 个答案:

答案 0 :(得分:0)

在这种情况下,您提供了ember两个相互矛盾的参数:您通过环境传递EMBER_ENV=development,并通过命令行传递--environment=acceptance。前者告诉它使用名为development的环境,后者告诉它使用名为acceptance的环境 - 但它不能同时进行这两种环境。

了解这两个相互冲突的命令ember中哪一个会选择兑现是您需要检查其文档的项目。当然,更好的办法就是解决冲突。


我建议做以下事情:

./node_modules/ember-cli/bin/ember serve "--environment=${EMBER_ENV:-acceptance}"

...如果您想尊重文件中的EMBER_ENV而不是命令行中的acceptance(但是当文件没有指定{EMBER_ENV时,请回到bash -x 1}})。如果您使用--environment=,则会明确地看到脚本传递的.env适用于acceptance文件中的内容。


另一方面,如果您始终想要使用环境export `cat ./.env` # if the file contained `EMBER_ENV`, unset it so our command-line argument is honored unset EMBER_ENV ./node_modules/ember-cli/bin/ember serve --environment=acceptance ,请在从文件加载环境后覆盖或删除环境:

export `cat ./.env`

所有这一切 -

EMBER_ENV

实际上是一种非常错误的做事方式(尽管如果您设置的唯一内容是.env,它就不会中断,并且它唯一拥有的值就是一个单词没有空格或特殊字符的ASCII)。如果您信任您的set -a # automatically export all variables source .env # run .env as a shell script within the current interpreter 文件由非恶意用户以有效的shell语法编写,那么您的错误就会减少:

.env

如果您不相信您的while IFS='=' read -r k v; [[ $k ]] || continue # skip empty lines printf -v "$k" %s "$v" || continue # set any variable given as a shell variable export "$k" # export those variables to the environment done < .env 在有效的shell语法中被编写为非恶意脚本,那么可能更像是:

{{1}}