【发布时间】:2014-11-13 17:19:04
【问题描述】:
我是 Meteor 的新手,正在设置开发、舞台和生产 Meteor.settings。
使用“开发”设置在我的本地系统上一切正常,但是当我捆绑它并在 Digital Ocean 上运行时,它会中断。如果我删除了对设置文件的调用,并将其替换为文本字符串,一切正常。
这是设置文件,名为“1_settings.js”,在所有其他 js 文件之前加载(至少在理论上?):
console.log("=> inside 1_settings.js");
environment = process.env.NODE_ENV || "development";
var settings = {
development: {
public: {},
private: {
"firstUser": {
"id": "ZsKaw3kSbQ4uSvzJg"
},
}
},
staging: {
public: {},
private: {}
},
production: {
public: {},
private: {
"firstUser": {
"id": "oPMfpAuwQ3nuTdpTA"
},
}
}
};
if (!process.env.METEOR_SETTINGS) {
console.log("=> No METEOR_SETTINGS passed in, using locally defined settings.");
if (environment === "production") {
Meteor.settings = settings.production;
} else if (environment === "staging") {
Meteor.settings = settings.staging;
} else {
Meteor.settings = settings.development;
}
// Push a subset of settings to the client.
if (Meteor.settings && Meteor.settings.public) {
__meteor_runtime_config__.PUBLIC_SETTINGS = Meteor.settings.public;
}
}
这里是我使用设置的地方:
如果(Meteor.isServer){
var settings = Meteor.settings.private;
console.log("=> settings: " + JSON.stringify(settings));
Meteor.startup(function () {
// bootstrap the admin user if they exist -- You'll be replacing the id later
if (Meteor.users.findOne(settings["firstUser"]["id"]))
Roles.addUsersToRoles(settings["firstUser"]["id"], ['admin']);
如你所见,它打破了上面代码的第二个“if”语句,我在这里调用了 settings["firstUser"]["id"],如下面的错误所示:
TypeError: Cannot read property 'firstUser' of undefined
at app/server/app.startup.js:8:42
at /home/qdev/bundle/programs/server/boot.js:175:5
/home/qdev/bundle/programs/server/node_modules/fibers/future.js:173
throw(ex);
^
显然,我知道设置属性未定义或为空。我不明白为什么?即使我没有设置 $NODE_ENV=production(我有),它应该仍然回退到开发设置。感谢您的帮助!
【问题讨论】:
-
我看到您正在检查
METEOR_SETTINGS以确保它没有设置。也许这是出于某种原因在您的生产环境中设置的。
标签: node.js meteor bundle production digital-ocean