Tag: 后台进程

在活动开始前一小时触发的最佳方式

我有许多Appointment模型,它们在一天的不同时间开始,在:00,:15,:30,:45 。 我想在事件开始前1小时触发代码发送提醒。 使用后台工作程序触发此操作的最佳方法是什么? 我正在使用发条gem,所以我可以安排Sidekiq工人。

单工dyno的并行背景任务

我们有一个Rails应用程序,其中某些请求在具有delayed_job的worker dyno上触发长时间运行的任务,而前端轮询直到它收到结果。 我们的流量虽小但增长很快,而且任务通常只需几秒钟即可完成,但最多可能需要一分钟。 现在,每个web和worker dyno都应该足以处理我们的负载。 问题是,delayed_job队列不会并行处理作业,因此较长的任务最终会阻碍其后面的任务。 我们正在寻找的是类似Unicorn的后端,其中单个工作人员dyno可以同时处理多个任务。 因为它是Rails,我们正在寻找多进程而不是multithreading的东西。 (我们尝试在procfile中创建多个worker条目 – 这在本地开发框中工作,但不在Heroku上工作) Procfile: web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb # Multiple workers defined here doesn’t translate into multiple processes on single worker dyno: worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work 这篇Heroku文章建议使用resque-pool gem作为解决方案。 这是唯一的解决方案,还是delayed_job也可以用于并行后台作业?

Rails背景图片上传

我正在使用“carrierwave”gem来上传图像文件,还使用“carrierwave backgrounder”处理上传+在后台使用RMagick处理图像(我使用延迟作业)。 一切都像魅力一样。 除了一件事 – 我想上传图像并在上传表单下显示它们(因此,所有内容都发生在同一页面上)。 所以,基本上,会发生什么 – 因为上传和图像处理相对较慢,到发布后页面呈现时 – 图像本身还没有准备好:所以image_tag显示了破碎的“资产”链接(href =“资产”)。 等待2-3秒(几次刷新)后,图像出现在屏幕上。 所以,我的问题是 – 我可以以某种方式显示“ 加载 ”动画(或文本,或其他图片 – 无关紧要) 而不是破碎(尚未提供)的图像,并且一旦准备就绪 – 将图像显示到用户。 这可以在没有AJAX的情况下完成吗? 或者我应该考虑用AJAX重新做它? 对不起,长话故事。 希望对你有所帮助! 提前致谢! 🙂

我应该将后台进程放在rails中?

我正在构建一个Rails项目,该项目具有我正在使用Rufus Scheduler管理的cron类型的作业。 我有两个关于如何在Rails中正确设置的问题: 放置工作代码的最佳位置在哪里? 我应该在哪里放置Rufus代码来安排工作? 我该怎么做呢?

启动或确保在应用程序/服务器重新启动时运行延迟作业

我们必须使用delayed_job(或其他一些后台作业处理器)在后台运行作业,但我们不允许更改服务器上的启动脚本/启动级别。 这意味着如果提供程序重新启动服务器,则不保证守护程序仍然可用(因为守护程序将由每个部署仅运行一次的capistrano配方启动)。 目前,我能想到确保delayed_job守护程序始终运行的最佳方法是向我们的Rails应用程序添加一个初始化程序,以检查守护程序是否正在运行。 如果它没有运行,那么初始化程序启动守护进程,否则它就会离开它。 因此,问题是我们如何检测到Delayed_Job守护程序是从脚本内部运行的? (我们应该能够相当容易地启动一个守护进程,我不知道如何检测一个守护进程是否已经激活)。 有人有主意吗? 此致,伯尼 基于下面的答案,这就是我提出的。 只需将它放在config / initializers中就可以了: #config/initializers/delayed_job.rb DELAYED_JOB_PID_PATH = “#{Rails.root}/tmp/pids/delayed_job.pid” def start_delayed_job Thread.new do `ruby script/delayed_job start` end end def process_is_dead? begin pid = File.read(DELAYED_JOB_PID_PATH).strip Process.kill(0, pid.to_i) false rescue true end end if !File.exist?(DELAYED_JOB_PID_PATH) && process_is_dead? start_delayed_job end

delayed_job没有记录

我无法记录来自delayed_job进程的消息。 这是正在运行的工作。 class MyJob def initialize(blahblah) @blahblah = blahblah @logger = Logger.new(File.join(Rails.root, ‘log’, ‘delayed_job.log’)) end def perform @logger.add Logger::INFO, “logging from delayed_job” #do stuff end end 我已经尝试了各种日志记录级别,并且在我的环境配置中有config.log_level =:debug。 我从monit运行delayed_job。 我正在使用delayed_job 3.0.1和ruby 1.9.3以及rails 3.0.10。