2017-01-10 5 views
0

MeteorアプリケーションをAWS Elastic Beanstalkにデプロイしようとしています。環境変数としてJSONオブジェクトをサポートしていないため、回避策が必要です。私は/tmp/settings.jsonsettings.jsonファイルをアップロードし、私は次の操作を実行し、サーバーのファイルで、その後process.env.METEOR_SETTINGS_FILEとしてパスを保存しています:未定義のニーズがMeteor.settings.public.segmentをする場所ブート後に追加するときのクライアントのメテオ設定設定

if (Meteor.isProduction) { 
    var meteorFile = process.env.METEOR_SETTINGS_FILE; 
    if(meteorFile == undefined) throw new Error(
    'METEOR_SETTINGS_FILE env variable must be defined in production.') 
    var fs = Npm.require('fs'); 
    var pjsonBuf = fs.readFileSync(meteorFile); 
    Meteor.settings = JSON.parse(pjsonBuf.toString().trim()); 
    Meteor.settings.public = Meteor.settings.public; 
} 

しかし、クライアント上で、私はまだUncaught TypeError: Cannot read property 'writeKey' of undefinedを取得します。私はMeteor.settings.publicのような空のオブジェクトを持っていて、上のファイルに私がconsole.log(Meteor.settings)なら、それらはすべてそこにあります。ここで

+0

meteorを開始するには、以下のコマンドを使用してください
meteor --settings settings.json –

+1

これは動作しません。実稼働サーバー上で 'meteor'を実行する – Mikkel

答えて

0

は、環境変数を使用したソリューションです。

おそらくElastic Beanstalkでは、シェルスクリプトや設定ファイルのいずれかで、あなたは環境変数を指定することができます。私の例では、Nginx/Passengerを使用しています。サーバーで

# Tell the app where MongoDB is 
passenger_env_var MONGO_URL mongodb://localhost:27017/amba; 
# Tell the app what its other settings are 
passenger_env_var ROOT_URL https://dev1.amba.online; 
passenger_env_var PEERJS_SERVER https://member2.myserver.com:9002/n5rdmnddd8q2z3q5mi; 

passenger_env_var IMAGE_DIR /var/www/imgserver/public; 

、流星の方法は、環境変数を読み込み、テーブルにそれらを挿入します。

// Get a list of environment vars and put them in the Environs collection 
// - client code will pick these up and handle them. 
    getEnvirons: function() { 
    Environs.remove({}); // Force them to be re-read every time 
    var toGet = ["PEERJS_SERVER", "ROOT_URL", "IMAGE_DIR"]; 
    _.each(toGet, function(e){ 
     var val = process.env[e]; 
     Environs.insert({name: e, value: val}); 
    }); 
    }, 

サーバーで流星の起動ブロックから上記を呼び出します。

残っていることは、Environsコレクションを公開して購読することです。 (私はあなたがそれをする方法を知っていると仮定しています)。環境変数データの読み込みはもちろん非同期ですので、コード内で許可してください

関連する問題