【问题标题】:heroku and sails app | crashes and timeoutsheroku 和风帆应用程序 |崩溃和超时
【发布时间】:2015-11-24 22:18:01
【问题描述】:

我有一个非常基本的 Sails 应用程序并在本地运行。当我部署到 Heroku 时,我无法从应用程序获得响应,然后最终得到“应用程序错误”。我有时会收到“未收到数据”。

heroku 日志

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 日志 --source 应用

2015-08-30T21:40:42.149449+00:00 app[web.1]: > firstApp@0.0.1 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! firstApp@0.0.1 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 firstApp@0.0
.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-

过程文件

web: npm start

package.json / 脚本

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

配置/环境/生产

module.exports = {

  models: {
    connection: 'mongoDbProd'
  },

  port: 80,

  log: {
     level: "silent"
  }

};

感谢任何方向!

【问题讨论】:

    标签: heroku sails.js


    【解决方案1】:

    您还可以为 Heroku 使用专门的 buildpack,在部署时运行 Grunt 任务,然后在 Sails 中为生产环境关闭 Grunt。这需要更多的工作,但它可能变得很有必要,因为 Heroku 有自己的超时,这可能会被 Grunt 花费太长时间来处理您的资产而绊倒。

    我们在heroku-buildpack-nodejs-grunt 上取得了成功。您可以按照说明将其安装在 Heroku 应用上,然后将任务定义复制到您的 tasks/register/prod.js 以包含 heroku:production 任务,例如:

    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'
      ]);
    
    };
    

    最后在你的app.js文件中,替换

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

    与:

    var config = rc('sails');
    if (process.env.NODE_ENV === 'production') {
      config.hooks = config.hooks || {};
      config.hooks.grunt = false;
    }
    // Start server
    sails.lift(config);
    

    【讨论】:

    • 谢谢!我也会试试这个。
    • 对我不起作用:/ 远程:>> 丑化源 .tmp/public/concat/production.js 失败。远程:警告:丑化失败。远程:语法错误:意外令牌:运算符(>)。远程:.tmp/public/concat/production.js 中的第 1575 行远程:使用 --force 继续。远程:远程:由于警告而中止。偏僻的: !推送被拒绝,无法编译 Node.js 应用程序。远程:远程:!远程推送失败:验证部署...
    • @Suisse 听起来丑化本身正在失败,这与 OP 面临的问题不同。我会检查它是否在本地工作。 uglification 失败的一个常见原因是使用 ES6 语法,而没有首先使用 Babel 之类的东西进行转译。
    • @sgress454 thx 这是因为箭头函数(lambda 函数)这解决了问题:npm install git://github.com/gruntjs/grunt-contrib-uglify#harmony --save
    【解决方案2】:

    发件人:https://github.com/balderdashy/sails/issues/2691

    使用以下内容创建文件 config/locals.js 为我解决了这个问题:

    module.exports = {
       hookTimeout: 30000, // 30 seconds
    }
    

    【讨论】:

      【解决方案3】:

      除了设置hookTimeout,确保你有

        migrate: 'alter' 
      

      在 config/models.js 中设置

      【讨论】:

        【解决方案4】:

        添加官方 Heroku Node.js 构建包对我有用:https://github.com/heroku/heroku-buildpack-nodejs

        在 Heroku CLI 中:

        heroku buildpacks:add https://github.com/heroku/heroku-buildpack-nodejs.git
        

        然后:

        git push heroku master
        

        一切都应该成功构建,并且您的应用应该在 Heroku 中运行良好。

        【讨论】:

          猜你喜欢
          • 2016-03-07
          • 2017-07-08
          • 1970-01-01
          • 2019-02-06
          • 2011-10-03
          • 2011-07-14
          • 2015-04-22
          相关资源
          最近更新 更多