API Runtime Services Troubleshooting

Introduction

This document summarizes the kinds of exceptions you may encounter when deploying or running an API Runtime Services application, or when installing or upgrading the acs NPM package on your system.

The appc cloud list and the appc cloud loglist CLI commands are used to troubleshoot deployment or runtime issues. Note that the appc cloud loglist may not immediately retrieve the latest logs from the server; you may need to wait a few seconds and try running the command again. Also, users should not expect this command to pull logs from the start date; the output will always return the latest logs. For example, if a start date is used and there are more than a 1000 lines up through today's date from the start date, the logs will only return a page with lines starting from today's date going back to the start date and not from the start date to today.

Exceptions are thrown upon deployment

Exception in app.js outside start() method

The following code references an undefined variable outside an application's start()method.

// initialize app
function start(app, express) {
	app.use(express.favicon(__dirname + '/public/images/favicon.ico')); //set favicon
}
 
adsgasdg; // This line causes exception.
 
// release resources
function stop() {
}

In this scenario, the Message field of the appc cloud list and the appc acs loglist output indicates a ReferenceError and the name and location of the reference. The Status field of the appc cloud list command is set to "Failed to deploy"

$ appc cloud list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:18:26 GMT+0800 (CST)
-- Status: Failed to deploy
-- Message: ReferenceError: adsgasdg is not defined at /app.js:6:1
 
$ acs loglist testapp
12/26/2013 05:18:030.335 [INFO] [4454] ------------ Run MVC App ------------
12/26/2013 05:18:030.635 [ERROR] [4454] Failed to load main script. ReferenceError: adsgasdg is not defined
at /app.js:6:1
12/26/2013 05:18:030.636 [ERROR] [4454] ReferenceError: adsgasdg is not defined
at /app.js:6:1

Exception inside app.js start() method

The following code references an undefined variable inside an application's start()method. 

// initialize app
function start(app, express) {
 
    adsgasdg;   // This line causes exception.
 
    app.use(express.favicon(__dirname + '/public/images/favicon.ico'));     //set favicon
}
 
// release resources
function stop() {
}

In this scenario, the Message field of the appc cloud list and the  appc cloud loglist output indicates a ReferenceError and the name and location of the exception. The Status field of the appc cloud list command is set to "Failed to deploy"

$ appc acs list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:20:40 GMT+0800 (CST)
-- Status: Failed to deploy
-- Message: ReferenceError: adsgasdg is not defined
at Object.start (/app.js:4:5)
 
$ acs loglist testapp
12/26/2013 05:20:043.923 [INFO] [4488] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:20:044.224 [ERROR] [4488] Failed to run start(). ReferenceError: adsgasdg is not defined
at Object.start (/app.js:4:5)
 
12/26/2013 05:20:044.225 [ERROR] [4488] ReferenceError: adsgasdg is not defined
at Object.start (/app.js:4:5)

Exception in a controller, outside of a function

The following code references an undefined variable inside a controller, outside any function definition: 

function index(req, res) {
    res.render('index', { title: 'Welcome to Node.ACS! ' + process.version });
}
 
asgasg;dkg;as   // This line causes exception.

When accessing the application and hitting the controller over HTTP, it returns the following error: 

Cannot get / 

In this scenario, the appc cloud list output doesn't indicate a problem, but the appc cloud loglist indicates a ReferenceError and the name and location of the exception. 

$ appc cloud list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Current number of deployed servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:24:54 GMT+0800 (CST)
-- Servers:
No. 1 ID: 52b81468754c4184e58e8789 Status: Deployed
 
$ acs loglist testapp
12/26/2013 05:24:059.035 [INFO] [4503] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:24:059.427 [ERROR] [4503] Failed to load controller "application.js".
    ReferenceError: asgasg is not defined at /controllers/application.js:5:1 

Exceptions are thrown at runtime

Exception in synchronous calls handling requests

The following code references an undefined variable inside a controller function. 

function index(req, res) {
 
   asgasg;dkg;as    // This line causes exception.
 
   res.render('index', { title: 'Welcome to Arrow Cloud! ' + process.version });
}

In this scenario, the appc cloud list output doesn't indicate a problem, but the appc cloud loglist indicates a ReferenceError and the name and location of the exception. 

$ appc cloud list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Current number of deployed servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:29:52 GMT+0800 (CST)
-- Servers:
No. 1 ID: 52b81468754c4184e58e8789 Status: Deployed
 
$ acs loglist testapp
12/26/2013 05:33:003.721 [INFO] [4541] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:33:004.122 [INFO] [4541] App started
ReferenceError: asgasg is not defined at index (/controllers/application.js:3:5)
[PERF] GET / 9 ms

The response when accessing the application and hitting that function indicates the name and location of the reference error:

ReferenceError: asgasg is not defined
    at index (/controllers/application.js:2:4)

Exception in asynchronous callbacks handling requests (or background jobs)

The following code sample uses the setTimeout() method to asynchronously call a function that contains an exception. 

function index(req, res) {
    setTimeout(function(){
        respond(res);
    }, 2000);
}
function respond(res) {
    asgasg;af   //This line causes exception.
    res.render('index', { title: 'Welcome to Node.ACS! ' + process.version });
} 

In this scenario when accessing the application over HTTP and hitting the function, the following error is returned:

An error has occurred: {"code":"ECONNRESET"} 

In this scenario, the appc cloud loglist indicates a ReferenceError and the corresponding stack trace; appc cloud list does not indicate any problem. 

$ appc cloud loglist testapp
12/26/2013 05:44:043.639 [INFO] [4606] ------------ Run MVC App ------------
 
info: socket.io started
12/26/2013 05:44:044.054 [INFO] [4606] App started
12/26/2013 05:44:053.999 [ERROR] [4606] ReferenceError: asgasg is not defined
at respond (/controllers/application.js:8:5)
at null._onTimeout (/controllers/application.js:3:9)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
 
12/26/2013 05:44:059.627 [INFO] [4614] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:45:000.029 [INFO] [4614] App started
 
$ acs list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Current number of deployed servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:29:52 GMT+0800 (CST)
-- Servers:
No. 1 ID: 52b81468754c4184e58e8789 Status: Deployed

Application crashes while handling requests

The following code has request handler that quickly uses up available memory, causing the application to crash. 

function index(req, res) {
    respond(res);
}
 
function respond(res) {
    var cur = 167772160;
    var bcast = 184549375;
    var addresses = [];
    while (cur <= bcast){
        cur += 1;
        addresses.push(cur);
    }
    console.log(addresses.length);
    console.log(addresses); // memory goes from a few megs to over a gig in seconds when trying to print this
    res.send(addresses);
} 

The appc cloud loglist output indicates "FATAL ERROR: JS Allocation failed - process out of memory"; appc cloud list doesn't indicate any problem. 

$ acs loglist testapp
12/26/2013 05:58:042.432 [INFO] [4628] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:58:042.828 [INFO] [4628] App started
FATAL ERROR: JS Allocation failed - process out of memory
12/26/2013 05:59:000.030 [INFO] [4636] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 05:59:000.434 [INFO] [4636] App started
 
$ acs list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Current number of deployed servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:29:52 GMT+0800 (CST)
-- Servers:
No. 1 ID: 52b81468754c4184e58e8789 Status: Deployed

Application crashes while running background jobs

The following code causes the application to run out of memory and crash while processing a setTimeout() function call. 

// initialize app
function start(app, express) {
    app.use(express.favicon(__dirname + '/public/images/favicon.ico'));     //set favicon
    setTimeout(dosth, 5000);
}
 
// release resources
function stop() {
}
 
 
function dosth() {
    var cur = 167772160;
    var bcast = 184549375;
    var addresses = [];
    while (cur <= bcast){
        cur += 1;
        addresses.push(cur);
    }
    console.log(addresses.length);
    console.log(addresses); // memory goes from a few megs to over a gig in seconds when trying to print this
}

The appc cloud loglist output indicates "FATAL ERROR: JS Allocation failed - process out of memory"; appc cloud list doesn't indicate any problem. 

$ appc cloud loglist testapp
12/26/2013 06:04:043.934 [INFO] [4667] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 06:04:044.332 [INFO] [4667] App started
FATAL ERROR: JS Allocation failed - process out of memory
12/26/2013 06:05:000.529 [INFO] [4671] ------------ Run MVC App ------------
info: socket.io started
12/26/2013 06:05:000.927 [INFO] [4671] App started
FATAL ERROR: JS Allocation failed - process out of memory
 
$ acs list testapp
App name: testapp
-- URL: http://a3110b813195ca3a774913a767e49a1ce5f17e63.cloud-services.appcelerator.com
-- Created at: Tue Dec 24 2013 21:15:19 GMT+0800 (CST)
-- Node Version: 0.10.22
-- Maximum allowed number of servers: 1
-- Desired number of servers: 1
-- Current number of deployed servers: 1
-- Active version: 0.1.0
-- Published at: Thu Dec 26 2013 09:29:52 GMT+0800 (CST)
-- Servers:
No. 1 ID: 52b81468754c4184e58e8789 Status: Deployed 

Installation errors

This section describes issues you may encounter when installing or upgrading API Runtime Services using NPM.

Error: ENOENT, no such file or directory

API Runtime Services installation fails with the following error: 

...
fs.js:427
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory '/usr/local/lib/node_modules/acs/bin/acsx'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.readFileSync (fs.js:284:15)
    at Object.<anonymous> (/usr/local/lib/node_modules/acs/scripts/config.js:21:19)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3

To resolve, try deleting your ~/.npm folder and cleaning the NPM cache, then re-installing: 

rm -rf ~/.npm
npm cache clear
sudo npm -g install acs

Related Links