Heroku 上的计划工作人员

Posted

技术标签:

【中文标题】Heroku 上的计划工作人员【英文标题】:Scheduled worker on Heroku 【发布时间】:2016-10-26 19:09:42 【问题描述】:

我正在开发这个在 Heroku 上按计划运行的组件,但我无法使其正常运行。我关注了this 和this 的帖子以使其正常工作。我设法根据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 初始化 开始 - 抓取类别... 谷歌

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

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 初始化 开始 - 抓取类别...

我错过了“Google”这个词。如果我将代码放在模块中,为什么会发生这种情况???

【问题讨论】:

【参考方案1】:

问题出在实际任务中

#! /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 停止执行所必需的。

【讨论】:

以上是关于Heroku 上的计划工作人员的主要内容,如果未能解决你的问题,请参考以下文章

单个 Heroku 应用程序上的多个工作程序/Web 进程

Heroku 上的 CodeIgniter 返回 404

Rails 6.1:Heroku 上的作业将使用 Async 而不是 Sidekiq

每当使用 Rails 在 Heroku 中执行计划任务

我收到错误 400:自定义 Heroku 域上的错误请求,但在 foo.herokuapp.com 上工作正常

Heroku调度程序不是每小时运行一次