mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Allow specifying interface with -p and --app-port
The syntax is "--port host:port". Not implemented for test-packages. No control is available over mongo ports (port or host). Fixes #469 and #1105.
This commit is contained in:
@@ -153,8 +153,8 @@ main.registerCommand({
|
||||
name: 'run',
|
||||
requiresApp: true,
|
||||
options: {
|
||||
port: { type: Number, short: "p", default: 3000 },
|
||||
'app-port': { type: Number },
|
||||
port: { type: String, short: "p", default: '3000' },
|
||||
'app-port': { type: String },
|
||||
production: { type: Boolean },
|
||||
'raw-logs': { type: Boolean },
|
||||
settings: { type: String },
|
||||
@@ -166,6 +166,32 @@ main.registerCommand({
|
||||
once: { type: Boolean }
|
||||
}
|
||||
}, function (options) {
|
||||
// XXX factor this out into a {type: host/port}?
|
||||
var portMatch = options.port.match(/^(?:(.+):)?([0-9]+)$/);
|
||||
if (!portMatch) {
|
||||
process.stderr.write(
|
||||
"run: --port (-p) must be a number or be of the form 'host:port' where\n" +
|
||||
"port is a number. Try 'meteor help run' for help.\n");
|
||||
return 1;
|
||||
}
|
||||
var proxyHost = portMatch[1] || null;
|
||||
var proxyPort = parseInt(portMatch[2]);
|
||||
|
||||
var appHost, appPort;
|
||||
if (options['app-port']) {
|
||||
var appPortMatch = options['app-port'].match(/^(?:(.+):)?([0-9]+)?$/);
|
||||
if (!appPortMatch) {
|
||||
process.stderr.write(
|
||||
"run: --app-port must be a number or be of the form 'host:port' where\n" +
|
||||
"port is a number. Try 'meteor help run' for help.\n");
|
||||
return 1;
|
||||
}
|
||||
appHost = appPortMatch[1] || null;
|
||||
// It's legit to specify `--app-port host:` and still let the port be
|
||||
// randomized.
|
||||
appPort = appPortMatch[2] ? parseInt(appPortMatch[2]) : null;
|
||||
}
|
||||
|
||||
if (release.forced) {
|
||||
var appRelease = project.getMeteorReleaseVersion(options.appDir);
|
||||
if (release.current.name !== appRelease) {
|
||||
@@ -182,8 +208,10 @@ main.registerCommand({
|
||||
|
||||
var runAll = require('./run-all.js');
|
||||
return runAll.run(options.appDir, {
|
||||
proxyPort: options.port,
|
||||
appPort: options['app-port'],
|
||||
proxyPort: proxyPort,
|
||||
proxyHost: proxyHost,
|
||||
appPort: appPort,
|
||||
appHost: appHost,
|
||||
settingsFile: options.settings,
|
||||
program: options.program || undefined,
|
||||
buildOptions: {
|
||||
|
||||
@@ -34,6 +34,7 @@ the .meteor directory in the root of the project.
|
||||
Options:
|
||||
--port, -p Port to listen on (instead of the default 3000). Also
|
||||
uses port N+1 and a port specified by --app-port.
|
||||
Specify as --port=host:port to bind to a specific interface.
|
||||
--production Simulate production mode. Minify and bundle CSS and JS files.
|
||||
--raw-logs Run without parsing logs from stdout and stderr.
|
||||
--settings Set optional data for Meteor.settings on the server
|
||||
|
||||
@@ -29,11 +29,19 @@ var Runner = function (appDir, options) {
|
||||
self.stopped = false;
|
||||
self.quiet = options.quiet;
|
||||
self.banner = options.banner || files.prettyPath(self.appDir);
|
||||
self.rootUrl = options.rootUrl || ('http://localhost:' + listenPort + '/');
|
||||
if (options.rootUrl) {
|
||||
self.rootUrl = options.rootUrl;
|
||||
} else if (options.proxyHost) {
|
||||
self.rootUrl = 'http://' + options.proxyHost + ':' + listenPort + '/';
|
||||
} else {
|
||||
self.rootUrl = 'http://localhost:' + listenPort + '/';
|
||||
}
|
||||
|
||||
self.proxy = new Proxy({
|
||||
listenPort: listenPort,
|
||||
listenHost: options.proxyHost,
|
||||
proxyToPort: self.appPort,
|
||||
proxyToHost: options.appHost,
|
||||
onFailure: options.onFailure
|
||||
});
|
||||
|
||||
@@ -61,6 +69,7 @@ var Runner = function (appDir, options) {
|
||||
self.appRunner = new AppRunner(appDir, {
|
||||
appDirForVersionCheck: options.appDirForVersionCheck,
|
||||
port: self.appPort,
|
||||
listenHost: options.appHost,
|
||||
mongoUrl: mongoUrl,
|
||||
oplogUrl: oplogUrl,
|
||||
buildOptions: options.buildOptions,
|
||||
|
||||
@@ -51,6 +51,7 @@ var AppProcess = function (options) {
|
||||
|
||||
self.bundlePath = options.bundlePath;
|
||||
self.port = options.port;
|
||||
self.listenHost = options.listenHost;
|
||||
self.rootUrl = options.rootUrl;
|
||||
self.mongoUrl = options.mongoUrl;
|
||||
self.oplogUrl = options.oplogUrl;
|
||||
@@ -168,12 +169,19 @@ _.extend(AppProcess.prototype, {
|
||||
env.PORT = self.port;
|
||||
env.ROOT_URL = self.rootUrl;
|
||||
env.MONGO_URL = self.mongoUrl;
|
||||
if (self.oplogUrl)
|
||||
if (self.oplogUrl) {
|
||||
env.MONGO_OPLOG_URL = self.oplogUrl;
|
||||
if (self.settings)
|
||||
}
|
||||
if (self.settings) {
|
||||
env.METEOR_SETTINGS = self.settings;
|
||||
else
|
||||
} else {
|
||||
delete env.METEOR_SETTINGS;
|
||||
}
|
||||
if (self.listenHost) {
|
||||
env.BIND_IP = self.listenHost;
|
||||
} else {
|
||||
delete env.BIND_IP;
|
||||
}
|
||||
|
||||
// Display errors from (eg) the NPM connect module over the network.
|
||||
env.NODE_ENV = 'development';
|
||||
@@ -306,6 +314,7 @@ var AppRunner = function (appDir, options) {
|
||||
self.appDirForVersionCheck = options.appDirForVersionCheck || self.appDir;
|
||||
// note: run-all.js updates port directly
|
||||
self.port = options.port;
|
||||
self.listenHost = options.listenHost;
|
||||
self.mongoUrl = options.mongoUrl;
|
||||
self.oplogUrl = options.oplogUrl;
|
||||
self.buildOptions = options.buildOptions;
|
||||
@@ -444,6 +453,7 @@ _.extend(AppRunner.prototype, {
|
||||
var appProcess = new AppProcess({
|
||||
bundlePath: bundlePath,
|
||||
port: self.port,
|
||||
listenHost: self.listenHost,
|
||||
rootUrl: self.rootUrl,
|
||||
mongoUrl: self.mongoUrl,
|
||||
oplogUrl: self.oplogUrl,
|
||||
|
||||
@@ -2,13 +2,15 @@ var _ = require('underscore');
|
||||
var Future = require('fibers/future');
|
||||
var runLog = require('./run-log.js');
|
||||
|
||||
// options: listenPort, proxyToPort, onFailure
|
||||
// options: listenPort, proxyToPort, proxyToHost, onFailure
|
||||
var Proxy = function (options) {
|
||||
var self = this;
|
||||
|
||||
self.listenPort = options.listenPort;
|
||||
self.listenHost = options.listenHost;
|
||||
// note: run-all.js updates proxyToPort directly
|
||||
self.proxyToPort = options.proxyToPort;
|
||||
self.proxyToHost = options.proxyToHost || '127.0.0.1';
|
||||
self.onFailure = options.onFailure || function () {};
|
||||
|
||||
self.mode = "hold";
|
||||
@@ -91,7 +93,7 @@ _.extend(Proxy.prototype, {
|
||||
}
|
||||
});
|
||||
|
||||
self.server.listen(self.listenPort, function () {
|
||||
self.server.listen(self.listenPort, self.listenHost || '0.0.0.0', function () {
|
||||
if (self.server) {
|
||||
self.started = true;
|
||||
} else {
|
||||
@@ -167,7 +169,7 @@ _.extend(Proxy.prototype, {
|
||||
c.res.end();
|
||||
} else {
|
||||
self.proxy.web(c.req, c.res, {
|
||||
target: 'http://127.0.0.1:' + self.proxyToPort
|
||||
target: 'http://' + self.proxyToHost + ':' + self.proxyToPort
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -178,7 +180,7 @@ _.extend(Proxy.prototype, {
|
||||
|
||||
var c = self.websocketQueue.shift();
|
||||
self.proxy.ws(c.req, c.socket, c.head, {
|
||||
target: 'http://127.0.0.1:' + self.proxyToPort
|
||||
target: 'http://' + self.proxyToHost + ':' + self.proxyToPort
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user