显示使用延迟作业一段时间后运行的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示使用延迟作业一段时间后运行的方法相关的知识,希望对你有一定的参考价值。

我是ruby的新手,我有一个消息传递应用程序,每当用户发送消息后,它应该在1分钟后显示一条自动消息我使用了延迟的作业gem并在mailing_job.rb中创建了一个执行方法我的应用程序/作业文件夹现在,当我的代码执行时,它可以正常工作,但它不会等待指定的延迟时间,而是在该时间本身执行。我在控制器中也创建了相同的方法,延迟方法语法使用的是控制器方法而不是来自mailin_job.rb的perform方法这是我的消息控制器的片段

def reply
    @message = MessageThread.new(message_params)
    @user2 = get_user(params[:id])
    save_message

    Mailing_Job.set(wait: 1.minute).perform_later()

    render 'material_admin/home.html.erb'
end

在我的app / job / mailing_job.rb文件中

class Mailing_Job < ActiveJob::Base
queue_as :default

 def perform()

    @auto_message = Setting.all[0]
    @body = @auto_message.body

end
end

config / application.rb文件

config.active_job.queue_adapter = :delayed_job

chat_user_message视图

<% @messages.each do |message| %>
<div class='right-message'>
  <div class='margin-bottom'>
    <span class='yellow'><%= message.body %></span>
  </div>
  <small>
    <%= message.created_at.strftime(" %I:%M %p") %>
  </small>
  <div>
    <small>
      <%= @body %>
    </small> </div>
</div>
<div class='left-message'>
  <div class='margin-bottom'>
    <span class='grey'><%= message.body %></span>
  </div>
  <small>
    <%= message.created_at.strftime(" %I:%M %p")%>
  </small>
</div>

任何人都可以向我解释我做错了什么,在此先感谢

答案

Delayed_job在与主Rails应用程序不同的进程中运行,无法创建视图的任何部分。此外,一旦“回复”操作呈现,您的服务器将断开与客户端的连接,并且在作业执行后无法联系它,除非您实现类似Web套接字的操作。

一个更简单的选项可能是将一些javascript添加到视图中,该视图检查服务器上的另一个方法(例如,每15秒)以查看作业是否已完成。它可以在检测到作业完成时通知用户。

以上是关于显示使用延迟作业一段时间后运行的方法的主要内容,如果未能解决你的问题,请参考以下文章

js中怎么让程序暂停一段时间

检查延迟的作业是不是在rails中运行

销毁 Rails 中所有延迟的工作

在延迟作业中获取已创建作业的ID

一段时间后停止 Spark Streaming 作业

延迟一段时间后显示 uipickerview