如何在node.js中创建和使用后台作业?
我遇到过两个库(node-resque和node-worker),但想知道是否有更多的东西使用.
由于我仍然需要处理的一些问题,我无法在我的服务器上运行resque-web但我仍然需要在我的resque队列中检查并重试失败的作业.
有没有人有任何关于如何查看失败的作业队列以查看错误是什么以及如何使用redis-cli命令行重试它的经验?
谢谢,
与Rspec示例并行实现Resque时,我感到困惑.以下是一个类昂贵的方法.generate(self)
类SomeClass ... ChangeGenerator.generate(self)... end
实现resque后,上面的类更改为以下内容并添加了ChangeRecorderJob类.
class SomeClass
...
Resque.enqueue(ChangeRecorderJob, self.id)
...
end
class ChangeRecorderJob
@queue = :change_recorder_job
def self.perform(noti_id)
notification = Notification.find(noti_id)
ChangeGenerator.generate(notification)
end
end
Run Code Online (Sandbox Code Playgroud)
它完美地运作.但我有两个问题.
之前,我的示例规范用于测试整个堆栈的.generate(self)方法.但是现在我把它推进到Resque工作中,我如何能够将我的示例连接起来以使相同的测试变为绿色而不会孤立?或者我必须隔离测试?
最后,如果我有10个工作岗位,我是否必须使用self.perform方法创建10个单独的工作类?
使用redis时,它给出了错误:
ERR command not allowed when used memory > 'maxmemory'
Run Code Online (Sandbox Code Playgroud)
info命令显示:
redis 127.0.0.1:6379> info
redis_version:2.4.10
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:kqueue
gcc_version:4.2.1
process_id:1881
uptime_in_seconds:116
uptime_in_days:0
lru_clock:1222663
used_cpu_sys:0.04
used_cpu_user:0.04
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
connected_clients:1
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:930912
used_memory_human:909.09K
used_memory_rss:1269760
used_memory_peak:931408
used_memory_peak_human:909.58K
mem_fragmentation_ratio:1.36
mem_allocator:libc
loading:0
aof_enabled:0
changes_since_last_save:4
bgsave_in_progress:0
last_save_time:1333432389
bgrewriteaof_in_progress:0
total_connections_received:1
total_commands_processed:2
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
vm_enabled:0
role:master
Run Code Online (Sandbox Code Playgroud)
used_memory高吗?我是一个完整的redis noob.如果是这样,这个问题是如何发生的,我应该如何从这里开始?同样的错误都发生在生产(Heroku)中,因此非常感谢任何帮助.谢谢.
我有一个工作轨道应用程序与resque队列系统工作得很好.但是,我缺乏一种实际上妖魔化resque工人的好方法.
我可以通过rake resque来启动它们:work QUEUE ="*"但我想这不是你应该让你的工人在前台运行的重点.出于某种原因,没有人似乎在解决这个问题.在官方resque github页面上声明你可以做这样的事情:
PIDFILE=./resque.pid BACKGROUND=yes QUEUE="*" rake resque:work
Run Code Online (Sandbox Code Playgroud)
好吧 - 它至少没有在这里进入背景.
我想知道在生产环境中是否有任何关于在Heroku上自动调整dynos和worker的好解决方案(可能是针对每个人的不同解决方案,因为它们非常不相关).对于这个,您/公司使用什么?
我找到了很多选择,但对于生产环境来说,它们似乎都不是很成熟.有Heroscale,它似乎引入了一些延迟,因为它不在本地运行,我也听说过一些停机时间.对delayed_jobs进行了修改,这些修改已经很长时间没有更新,并且当前的捆绑包存在一些问题.还有一些与reque相关的替代方案,似乎没有很好地处理一些HTTP异常,导致应用程序崩溃,而其他似乎需要一个始终运行的工作程序来安排其他工作程序,并且还可能遭受一些HTTP异常问题.
好.到底.现在,在Rails3的生产环境中使用Heroku的dynos和worker进行自动缩放的目的是什么?
提前致谢.
我在Ubuntu 9.10,Rails 2.3.4,ruby-ee 2010.01,PostgreSQL 8.4.2上有站点运行rails应用程序和resque worker在生产模式下运行
工人不断提出错误:PGError:服务器意外关闭了连接.
我最好的猜测是主resque进程建立与db的连接(例如authlogic在使用User.acts_as_authentic时这样做),同时加载rails app类,并且该连接在fork()ed进程中被破坏(退出?),所以下一个分叉孩子们得到了一些破碎的全局ActiveRecord :: Base.connection
我可以使用此示例代码重现非常类似的行为,模拟resque worker中的fork/processing.(AFAIK,libpq的用户建议无论如何都要在forked进程中重新创建连接,否则它不安全)
但是,奇怪的是,当我使用pgbouncer或pgpool-II而不是直接的pgsql连接时,不会出现这样的错误.
那么,问题是我应该在哪里以及如何挖掘以找出为什么它被破坏以进行普通连接并且正在使用连接池?还是合理的解决方法?
我正在尝试使用php-resque在我的服务器上排队并执行ffmpeg转换.我广泛理解它应该如何工作,但我在细节方面有些麻烦,找不到任何教程.具体来说,我不明白我应该把工作班放在哪里,以及如何将课程交给我的工人并开始工作.我读到的只是说"让你的应用程序正在进行中还包括通过自动加载器或包括它们告诉工人你的工作类."
希望有人可以概述使用php-resque的整体结构.
简单的问题.我有一个ActiveRecord模型,我希望在保存记录后执行后期处理.所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中.为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容:
after_create :queue_for_processing
Run Code Online (Sandbox Code Playgroud)
很简单.我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化.我的期望是记录仍然会被保存,我可以稍后手动处理该作业.但是queue_for_processing方法抛出异常(预期行为)并停止保存记录.
我误解了after_create是如何工作的吗?或者我的理解是否正确并且发生了什么时髦?
谢谢.
默认的resque web界面说我有7个工作中的5个工作.我不明白这是怎么回事.
我正在使用heroku,所以当我的dyno重新启动时,它应该关闭现有的dynos和worker,然后启动新的dynos和worker.所以,我假设这些工人中的一些是陈旧的,但是resque认为工作人员比应该工作的人多得多......(应该只有1人)
如何检查这些是否陈旧或死亡?我希望看到只有一名工人在工作.
最终,我希望我会做任何这样的帖子说:我如何清除卡住/陈旧的Resque工作人员?,但首先我想知道如何确定是否应该移除一名工人......我不想盲目地注销工人......
如果这是一个显而易见的问题,请道歉.我是新来的.
谢谢!
resque ×10
redis ×3
activerecord ×2
delayed-job ×2
heroku ×2
after-create ×1
background ×1
command-line ×1
daemon ×1
node.js ×1
php ×1
postgresql ×1
rspec ×1
ruby ×1
scaling ×1