我在OS X系统上本地运行Meteor应用程序并使用meteor-settings.json文件:
$ cat meteor-settings.json
{
"public": {
"s3path": "https://d2v4p3rms9rvi3.cloudfront.net"
}
}
Run Code Online (Sandbox Code Playgroud)
当我按照以下方式运行流星时:
$ meteor --version
Meteor 1.2.1
$ meteor --settings meteor-settings.json
Run Code Online (Sandbox Code Playgroud)
Meteor.settings.public.s3path 有预期的s3网址,一切都很好.
根据官方Meteor文档,我可以使用METEOR_SETTINGS环境变量.问题是,当我填充并导出它时(如下所示):
$ export METEOR_SETTINGS=$(cat meteor-settings.json)
$ echo $METEOR_SETTINGS
{ "public": { "s3path": "https://d2v4p3rms9rvi3.cloudfront.net" } }
$ meteor
Run Code Online (Sandbox Code Playgroud)
Meteor.settings.public 变空,所有基于s3-url的功能都被破坏了.
在不使用env变量的情况下,我无法捆绑和模拟生产部署,因为afaik生产部署无法使用命令行标志(至少在AWS/EBS上).
为什么Meteor没有填充Meteor.settings.public?我有什么想法可以解决这个问题?
文档中的重点是:
直接运行服务器时(例如从捆绑包中),您可以通过将JSON直接放入METEOR_SETTINGS环境变量来指定设置.
当他们说"直接运行您的服务器(例如从捆绑中)"时,他们意味着使用meteor构建,然后使用节点运行生成的bundle.meteor命令不会按设计选择METEOR_SETTINGS,因为METEOR_SETTINGS仅用于生产.
对于亚马逊,尝试这样的事情:
METEOR_SETTINGS={"public": {"key": "ABC"}} node main.js
Run Code Online (Sandbox Code Playgroud)
在命令中设置环境变量以运行meteor应用程序.不确定这是否适用于亚马逊.