8

有人想出使用 Meteor.js 检测托管环境的语法或模式吗?我已经让 Heroku buildpacks 工作了,并且有一个开发/生产环境,但是对于如何让我的应用程序检测它在哪个环境中运行,我有点空白。

有没有办法让 node.js 检测它在哪个端口上运行?我希望可能有一些像 app.address().port 这样的低级别的东西,但这似乎不起作用......

编辑:这是对我有用的解决方案。请注意,以下需要在服务器上运行,因此需要将其包含在 server\server.js 或类似文件中。

if (Meteor.is_server) {
    Meteor.startup(function () {
        // we want to be able to inspect the root_url, so we know which environment we're in
        console.log(JSON.stringify(process.env.ROOT_URL));

        // in case we want to inspect other process environment variables
        //console.log(JSON.stringify(process.env));
    });
}

还创建了以下内容:

Meteor.methods({
  getEnvironment: function(){
    if(process.env.ROOT_URL == "http://localhost:3000"){
        return "development";
    }else{
        return "staging";
    }
  }
 });    

这允许在客户端进行以下操作:

 Meteor.call("getEnvironment", function (result) {
      console.log("Your application is running in the " + result + "environment.");
 });

谢谢拉胡尔!

4

3 回答 3

13

您可以检查process.env服务器上的变量以查找有关当前环境的信息,包括端口:

{ TERM_PROGRAM: 'Apple_Terminal',
  TERM: 'xterm-256color',
  SHELL: '/bin/bash',
  TMPDIR: '/var/folders/y_/212wz0cx5vs20yd7y2psnh7m0000gp/T/',
  Apple_PubSub_Socket_Render: '/tmp/launch-hch25f/Render',
  TERM_PROGRAM_VERSION: '309',
  OLDPWD: '/usr/local/meteor/bin',
  TERM_SESSION_ID: '3FE307A0-B8FC-41AD-B1EB-FCFA0B8B25D1',
  USER: 'Rahul',
  COMMAND_MODE: 'unix2003',
  SSH_AUTH_SOCK: '/tmp/launch-gFCBXS/Listeners',
  __CF_USER_TEXT_ENCODING: '0x1F6:0:0',
  Apple_Ubiquity_Message: '/tmp/launch-QAWKHL/Apple_Ubiquity_Message',
  PATH: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/Rahul/Documents/Sites/test',
  NODE_PATH: '/usr/local/meteor/lib/node_modules',
  SHLVL: '1',
  HOME: '/Users/Rahul',
  LOGNAME: 'Rahul',
  LC_CTYPE: 'UTF-8',
  SECURITYSESSIONID: '186a4',
  PORT: '3001',
  MONGO_URL: 'mongodb://127.0.0.1:3002/meteor',
  ROOT_URL: 'http://localhost:3000' }
于 2013-01-06T18:48:19.357 回答
3

有一个直接的 Meteor 函数:

Meteor.isDevelopment

见:https ://docs.meteor.com/api/core.html#Meteor-isDevelopment

和生产:

Meteor.isProduction

都返回一个布尔值

于 2016-07-04T10:22:41.207 回答
2

我使用了上述NODE_ENV变量的变体。请参阅此处了解更多信息:

http://meteorpedia.com/read/Environment_Variables#Checking%20the%20value%20of%20an%20Environment%20Variable

if Meteor.isServer
  Meteor.methods
    'getEnvironment': -> process.env.NODE_ENV

Meteor.call 'getEnvironment', (err, result) ->
  if result == 'development'
    console.log('In dev env')
于 2015-05-09T06:00:24.000 回答