我试图更好地理解线程处理过程。我有一个应用程序,无论何时创建新项目都会发送电子邮件,工作正常。我已经能够在create方法中使用sleep
来延迟交付。
我想插入一个线程并进行客户端测试。我将初始线程添加到create方法时收到Template is missing
错误。
items_controller.rb
class ItemsController < ApplicationController
def create
@user = User.find(params[:user_id])
@item = @user.items.create(item_params)
Thread.new do
respond_to do |format|
if @item.save
format.html { redirect_to_user_path(@user), notice: 'Item was created successfully.' }
else
format.html { redirect_to_user_path(@user), notice: 'Item was NOT created successfully.' }
end
end
PlayMailer.sample_email(@user).deliver
@user.status = "Delivered"
@user.save
sleep 60
end
end
private....
答案 0 :(得分:4)
没有-NO-禁忌。不,不要这样做。
你不应该使用线程。事实上,在rails应用程序中,您根本不需要使用线程。
后台工作人员需要发送延迟的电子邮件。您将电子邮件推送到队列,然后工作人员(另一个进程)选择电子邮件并发送它。
以下是您的一些链接:Sidekiq用于后台作业。 Action Mailer basics指南。
我已经能够在create方法中使用sleep来延迟传递。
延迟交货?是的,从某种意义上说。您还推迟了对该请求的整体响应,这正是我们想要延迟发送电子邮件的原因:不要减慢Web请求的速度。