【问题标题】:Using kue-scheduler with ParseServer on Heroku在 Heroku 上使用 kue-scheduler 和 ParseServer
【发布时间】:2016-11-24 09:21:29
【问题描述】:

在使用 heroku redis 插件在 heroku 上运行 kue-scheduler 时,虽然我可以让 kue 作业工作,但似乎 kue-scheduler 需要在 heroku redis 环境中不允许的某些 redis 配置。有没有人在 Heroku 环境中成功运行 kue-scheduler。这是我的 index.js 文件的开头:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');

var kue = require('kue-scheduler')
var queue = kue.createQueue({redis:
        'redis://h:***************@ec2-**-19-83-130.compute-1.amazonaws.com:23539'
        });

var job = queue.create('test', {
    title: 'Hello world'
  , to: 'j@example.com'
  , template: 'welcome-email'
}).save( function(err){
   if( !err ) console.log( job.id );
});

job.log('$Job %s run', job.id);

queue.every('30 seconds', job);

queue.process('test', function(job, done){
  test_function(job.data.title, done);
});

function test_function(title, done) {
  console.log('Ran test function with title %s', title)
  // email send stuff...
  done();
}

这是错误。

2016-07-21T00:46:26.445297+00:00 app[web.1]: /app/node_modules/parse-server/lib/ParseServer.js:410
2016-07-21T00:46:26.445299+00:00 app[web.1]:             throw err;
2016-07-21T00:46:26.445300+00:00 app[web.1]:             ^
2016-07-21T00:46:26.445417+00:00 app[web.1]: ReplyError: ERR unknown command 'config'
2016-07-21T00:46:26.445419+00:00 app[web.1]:     at parseError (/app/node_modules/redis-parser/lib/parser.js:161:12)
2016-07-21T00:46:26.445420+00:00 app[web.1]:     at parseType (/app/node_modules/redis-parser/lib/parser.js:222:14)
2016-07-21T00:46:26.466188+00:00 app[web.1]:

据我所知,问题在于 heroku redis 不允许在其 redis 基础架构上配置选项。

如果有人成功了,感谢任何建议。

【问题讨论】:

  • 这个问题我可以通过以下方式解决:var Queue = kue.createQueue({ redis: 'redis://x:xxxxxxxxxxx@ec2-50-19-83-130.compute-1.amazonaws.com:23539', skipConfig: true } ); 但是,重复任务似乎没有运行。
  • 您是否还必须创建 worker dyno 才能使整个设置正常工作?
  • 我想我已经注意到与您使用 skipConfig:true 的设置不一致。您能否按预期验证行为?

标签: heroku parse-platform redis kue


【解决方案1】:

通过以下方式解决了这个问题:

var queue = kue.createQueue(
                {redis: 'redis://xxxxxxxxxxxxx@ec2-50-19-83-130.compute-1.amazonaws.com:23539',
                 skipConfig: true
                });

只需要skipConfig参数

【讨论】:

  • 你最终让重复性任务工作了吗?我有类似的设置,没有错误,但没有运行任何任务。
【解决方案2】:

我遇到了同样的问题,无法让kue-scheduler 处理Heroku-Redis。为了解决这个问题,我改用 Heroku 插件 Redis Cloud

这允许您设置所需的 Redis 标志 notify-keyspace-events,这在常规 Heroku-Redis 附加组件上是不可修改的。设置这个标志:

  1. 添加 Redis Cloud heroku 插件
  2. 转到 heroku 设置页面
  3. 在配置变量中显示配置变量
  4. 复制REDISCLOUD_URL,它应该类似于redis://rediscloud:PASSWORD@xxx.redislabs.com:PORT_NUMBER
  5. 在终端输入redis-cli -h xxx.redislabs.com -p PORT_NUMBER -a PASSWORD 变量来自REDISCLOUD_URL
  6. 连接后,输入config set notify-keyspace-events Ex
  7. 您可以通过输入 config get notify-keyspace-events 来验证它是否设置正确
  8. 确保在调用kue.createQueue() 时更新您的javascript 代码以指向您的新REDISCLOUD_URL

感谢@josephktcheung 在这里所做的工作:https://github.com/lykmapipo/kue-scheduler/issues/46

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2014-05-24
    • 2016-12-20
    • 2016-06-02
    相关资源
    最近更新 更多