サーチ…


高度な環境設定

より複雑なアプリケーションの場合、複数の環境変数を使用して `` settings.json`オブジェクトを構築したいと思うでしょう。

if(Meteor.isServer){
  Meteor.startup(function()){
    // this needs to be run on the server
    var environment, settings;

    environment = process.env.METEOR_ENV || "development";

    settings = {
      development: {
        public: {
          package: {
            name: "jquery-datatables",
            description: "Sort, page, and filter millions of records. Reactively.",
            owner: "LumaPictures",
            repo: "meteor-jquery-datatables"
          }
        },
        private: {}
      },
      staging: {
        public: {},
        private: {}
      },
      production: {
        public: {},
        private: {}
      }
    };

    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;
      }
      console.log("Using [ " + environment + " ] Meteor.settings");
    }
  });
}

METEOR_SETTINGSでのアプリパラメータの指定

METEOR_SETTINGS環境変数はJSONオブジェクトを受け入れ、そのオブジェクトをMeteor.settingsオブジェクトに公開します。まず、いくつかの設定情報を使ってsettings.jsonをあなたのアプリケーションルートに追加しsettings.json

{
  "public":{
    "ga":{
      "account":"UA-XXXXXXX-1"
    }
  }
}

次に、設定ファイルを使用してアプリケーションを起動する必要があります。

# run your app in local development mode with a settings file
meteor --settings settings.json

# or bundle and prepare it as if you're running in production
# and specify a settings file
meteor bundle --directory /path/to/output
cd /path/to/output
MONGO_URL="mongodb://127.0.0.1:27017" PORT=3000 METEOR_SETTINGS=$(cat /path/to/settings.json) node main.js

これらの設定は、Meteor.settingsからアクセスし、アプリで使用できます。

Meteor.startup(function(){
  if(Meteor.isClient){
    console.log('Google Analytics Account', Meteor.settings.public.ga.account);
  }
});

サーバー上の環境検出

環境変数は、 process.envオブジェクトを介してサーバーでも使用できます。

if (Meteor.isServer) {
  Meteor.startup(function () {
    // detect environment by getting the root url of the application
    console.log(JSON.stringify(process.env.ROOT_URL));

    // or by getting the port
    console.log(JSON.stringify(process.env.PORT));

    // alternatively, we can inspect the entire process environment
    console.log(JSON.stringify(process.env));
  });
}

メテオメソッドを用いたクライアント環境検出

サーバー上の環境を検出するには、サーバーがどの環境にあるかを判別してから、クライアントからヘルパー・メソッドを呼び出すため、サーバー上にヘルパー・メソッドを作成する必要があります。基本的には、サーバーからクライアントに環境情報を中継するだけです。

//------------------------------------------------------------------------------------------------------
// server/server.js
// we set up a getEnvironment method

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

//------------------------------------------------------------------------------------------------------
// client/main.js
// and then call it from the client

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

NODE_ENVを使用したクライアント環境検出

Meteor 1.3以降、Meteorはデフォルトでクライアント上のNODE_ENV変数を公開するようにNODE_ENVました。

if (Meteor.isClient) {
  Meteor.startup(function () {
    if(process.env.NODE_ENV === "testing"){
      console.log("In testing...");
    }
    if(process.env.NODE_ENV === "production"){
      console.log("In production...");
    }
  });
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow