我正在尝试将Meteor设置为使用pm2(https://github.com/Unitech/pm2)而不是永远作为节点进程监视器。我没有幸运获得pm2进程需要看到Meteor应用程序的环境变量。
这是我的流程:
export MONGO_URL="mongodb://localhost:27017/meteor"
export PORT=4000
export ROOT_URL="https://beta.example.com/"
pm2 start main.js --name MyMeteorApp
在pm2的错误日志中,我看到我的Meteor应用程序抱怨找不到MONGO_URL
。
为了使用pm2,是否需要执行导出的特定方式?
答案 0 :(得分:8)
您可以创建process.json
(PM2 fleet配置文件)文件,您可以在其中指定环境变量。
例如:
{
"apps": [
{
"name": "MyMeteorApp",
"script": "./main.js",
"log_date_format": "YYYY-MM-DD",
"exec_mode": "fork_mode",
"env": {
"PORT": 4000,
"MONGO_URL": "mongodb://localhost:27017/meteor",
"ROOT_URL": "https://beta.example.com/"
}
}
]
}
开头:pm2 start processes.json
答案 1 :(得分:2)
去看看pm2-meteor。应该帮助你生成pm2-env.json。
$ npm i -g pm2-meteor
$ cd myMeteorProject
$ pm2-meteor --settings meteor-settings.json
答案 2 :(得分:2)
截至2018年
我遇到了这样一个大问题,但现在已经解决了问题。
当您使用PM2进行Meteor App的自定义生产时,您只需将文件process.json
放在bundle
目录中并运行以下命令,
pm2 start process.json
以下是我希望在生产环境中作为process.json
传递的文件METEOR_SETTINGS
的参数,
{
"apps": [
{
"name": "My APP",
"script": "./main.js",
"log_date_format": "YYYY-MM-DD",
"exec_mode": "fork_mode",
"env": {
"PORT": 3000,
"MONGO_URL": "mongodb://username:password@127.0.0.1:27017/dbname",
"ROOT_URL": "http://hostname/",
"METEOR_SETTINGS": {
"MAIL_URL": "smtps://<your username>:<your password>@smtp.gmail.com:465",
"AUTHKEY": "185938A0asmD231231231231e4992",
"HOSTNAME": "some example",
"public": {
"COMPANY_NAME": "Some Company Name"
}
}
}
}
]
}
因此,在上面的代码中,您可以看到我如何设置METEOR_SETTINGS
。
答案 3 :(得分:1)
pm2有点奇怪。但是这样的事情可以起作用
pm2 kill
MONGO_URL="mongodb://localhost:27017/meteor" PORT=4000 ROOT_URL="https://beta.example.com/" pm2 start app.js --name MyMeteorApp
之所以发生这种情况是因为pm2将所有内容包装到自己的新进程中,无法查看原始环境的变量。我认为还有一种方法可以将环境变量放在JSON文件中,但我不确定文档的确有点空白
答案 4 :(得分:-3)
在做了一些挖掘后,我找到了正确的答案。在pm2中,您放置在JSON任务定义中的任何不是保留关键字之一的任何内容都将导出到您在pm2中作为环境变量运行的进程。