Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

heroku and sails app | crashes and timeouts

I have a very basic sails app up and running locally. When I deploy to Heroku, I cannot get a response from the app and then eventually get "Application Error". I sometimes receive "No data received".

heroku logs

2015-08-30T22:06:50.949475+00:00 heroku[api]: Release v22 created by me

2015-08-30T22:08:57.324207+00:00 heroku[router]: at=error code=H20 desc="App boo
t timeout" method=GET path="/" host=www.ninjalist.io request_id=8e21f6eb-1a59-4e
31-9c40-00aab002d0f1 fwd="118.61.238.166" dyno= connect= service= status=503 bytes=

2015-08-30T22:08:52.058851+00:00 heroku[web.1]: State changed from starting to down

2015-08-30T22:11:55.735176+00:00 heroku[router]: at=error code=H10 desc="App cra
shed" method=GET path="/" host=ninjalist.herokuapp.com request_id=314047d1-97d8-
40ea-8596-4b21978eb581 fwd="108.61.228.166" dyno= connect= service= status=503 b

heroku logs --source app

2015-08-30T21:40:42.149449+00:00 app[web.1]: > [email protected] start /app
2015-08-30T21:40:42.149452+00:00 app[web.1]: > sails lift --prod
2015-08-30T21:40:42.149453+00:00 app[web.1]:
2015-08-30T21:40:42.149430+00:00 app[web.1]:
2015-08-30T21:40:42.873435+00:00 app[web.1]: ←[90mStarting app...←[39m
2015-08-30T21:40:42.871270+00:00 app[web.1]:
2015-08-30T21:40:42.873742+00:00 app[web.1]:
2015-08-30T21:40:44.441658+00:00 app[web.1]: Warning: connect.session() MemorySt
ore is not
2015-08-30T21:40:44.441664+00:00 app[web.1]: designed for a production environme
nt, as it will leak
2015-08-30T21:40:44.441666+00:00 app[web.1]: memory, and will not scale past a s
ingle process.
2015-08-30T21:41:04.326177+00:00 app[web.1]: Error: The hook `grunt` is taking t
oo long to load.
2015-08-30T21:41:04.326187+00:00 app[web.1]:     at Timer.listOnTimeout (timers.
js:119:15)
2015-08-30T21:41:04.326183+00:00 app[web.1]: Make sure it is triggering its `ini
tialize()` callback, or else set `sails.config.grunt._hookTimeout to a higher va
lue (currently 20000)
2015-08-30T21:41:04.326185+00:00 app[web.1]:     at tooLong [as _onTimeout] (/ap
p/node_modules/sails/lib/app/private/loadHooks.js:92:21)
2015-08-30T21:41:04.587989+00:00 app[web.1]:
2015-08-30T21:41:04.641592+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bi
n/node" "/app/.heroku/node/bin/npm" "start"
2015-08-30T21:41:04.641839+00:00 app[web.1]: npm ERR! node v0.12.7
2015-08-30T21:41:04.668957+00:00 app[web.1]: npm ERR! npm  v2.11.3
2015-08-30T21:41:04.669159+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2015-08-30T21:41:04.669368+00:00 app[web.1]: npm ERR! [email protected] start: `sai
ls lift --prod`
2015-08-30T21:41:04.669504+00:00 app[web.1]: npm ERR! Exit status 1
2015-08-30T21:41:04.669672+00:00 app[web.1]: npm ERR!
2015-08-30T21:41:04.669827+00:00 app[web.1]: npm ERR! Failed at the [email protected]
.1 start script 'sails lift --prod'.
2015-08-30T21:41:04.670024+00:00 app[web.1]: npm ERR! This is most likely a prob
lem with the firstApp package,
2015-08-30T21:41:04.670133+00:00 app[web.1]: npm ERR! not with npm itself.
2015-08-30T21:41:04.670267+00:00 app[web.1]: npm ERR! Tell the author that this
fails on your system:
2015-08-30T21:41:04.670427+00:00 app[web.1]: npm ERR!     sails lift --prod
2015-08-30T21:41:04.675558+00:00 app[web.1]: npm ERR! You can get their info via
:
2015-08-30T21:41:04.676317+00:00 app[web.1]: npm ERR!     npm owner ls firstApp
2015-08-30T21:41:04.697584+00:00 app[web.1]:
2015-08-30T21:41:04.676320+00:00 app[web.1]: npm ERR! There is likely additional
 logging output above.
2015-08-30T21:41:04.701882+00:00 app[web.1]: npm ERR!     /app/npm-debug.log
2015-08-30T21:41:04.640986+00:00 app[web.1]: npm ERR! Linux 3.13.0-61-

Procfile:

web: npm start

package.json / scripts:

  "scripts": {
    "debug": "node debug app.js",
    "start": "sails lift --prod"
  }

config/env/production:

module.exports = {

  models: {
    connection: 'mongoDbProd'
  },

  port: 80,

  log: {
     level: "silent"
  }

};

Any direction is appreciated!

like image 341
CiscoKidx Avatar asked Aug 30 '15 22:08

CiscoKidx


2 Answers

You can also use a specialized buildpack for Heroku that runs the Grunt tasks on deployment, and then turn off Grunt in Sails for the production environment. It's a bit more work, but it can become necessary because Heroku has its own timeout which can be tripped by Grunt taking too long to crunch your assets.

We've had success with heroku-buildpack-nodejs-grunt. You can follow the instructions to install it on your Heroku app, then copy the task definition in your tasks/register/prod.js to include heroku:production task, e.g.:

module.exports = function (grunt) {

  grunt.registerTask('prod', [
    'compileAssets',
    'concat',
    'uglify',
    'cssmin',
    'sails-linker:prodJs',
    'sails-linker:prodStyles',
    'sails-linker:devTpl',
    'sails-linker:prodJsJade',
    'sails-linker:prodStylesJade',
    'sails-linker:devTplJade'
  ]);

  grunt.registerTask('heroku:production', [
    'compileAssets',
    'concat',
    'uglify',
    'cssmin',
    'sails-linker:prodJs',
    'sails-linker:prodStyles',
    'sails-linker:devTpl',
    'sails-linker:prodJsJade',
    'sails-linker:prodStylesJade',
    'sails-linker:devTplJade'
  ]);

};

Then finally in your app.js file, replace

sails.lift(rc('sails'));

with:

var config = rc('sails');
if (process.env.NODE_ENV === 'production') {
  config.hooks = config.hooks || {};
  config.hooks.grunt = false;
}
// Start server
sails.lift(config);
like image 197
sgress454 Avatar answered Nov 15 '22 04:11

sgress454


From: https://github.com/balderdashy/sails/issues/2691

Creating a file config/locals.js with the following resolved the issue for me:

module.exports = {
   hookTimeout: 30000, // 30 seconds
}
like image 36
CiscoKidx Avatar answered Nov 15 '22 04:11

CiscoKidx