Heroku上的预定工作人员

时间:2016-06-24 08:19:56

标签: node.js heroku scheduled-tasks

我正在研究在Heroku上运行的这个组件,但我无法使其正常运行。我按照thisthis帖子进行操作。我设法根据heroku logs在heroku上运行计划任务。我遇到的问题是,如果我在一个模块中运行代码(我需要它按计划运行),它不会运行 xray 模块,我不确定为什么会这样。

这是我的代码没有模块及其输出,如果我根据这里附加的链接之一运行bin文件夹中的代码,这是heroku将运行计划任务的行为:

var Xray = require('x-ray');

// helpers
var x = Xray({
  filters: {
    cleanPrice: function (value) {
      return typeof value === 'string' ? value.replace(/\r|\t|\n|€/g, "").trim() : value
    },
    whiteSpaces: function (value) {
      return typeof value === 'string' ? value.replace(/ +/g, ' ').trim() : value
    }
  }
});

console.log("START - Scraping categories...");

x('http://google.com', 'title')(function (err, title) {
  console.log(title) // Google
})
  

λbin\ node init   START - 刮刮类别......   谷歌

这是我在模块中的代码和输出

module.exports = {
  start: function () {

    var Xray = require('x-ray');

    // helpers
    var x = Xray({
      filters: {
        cleanPrice: function (value) {
          return typeof value === 'string' ? value.replace(/\r|\t|\n|€/g, "").trim() : value
        },
        whiteSpaces: function (value) {
          return typeof value === 'string' ? value.replace(/ +/g, ' ').trim() : value
        }
      }
    });

    console.log("START - Scraping categories...");

    x('http://google.com', 'title')(function (err, title) {
      console.log(title) // Google
    })

  }
}

输出

  

λbin\ node init   START - 刮刮类别......

我错过了“Google”这个词。如果我将代码放在模块中,为什么会这样呢?

1 个答案:

答案 0 :(得分:0)

问题在于实际任务

#! /app/.heroku/node/bin/node

"use strict";

var app = require('../src/app.js');
function initScrape() {
  app.start();
}
initScrape();
process.exit(1); // tell node to exit (prevent promise)

通过添加process.exit(1);我阻止任何承诺得到解决。这是nodejs停止执行所必需的。