当我在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
编辑:我更改了问题,因为它没有所有相关代码
答案 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}}