1

Rails 4th edition book を使用したアジャイル Web 開発について言及しています。最初に注文の確認用、2 番目に出荷された注文用の 2 つの電子メール通知を作成しました。ここで、「注文の確認」メールをユーザーに送信してから 5 分間の遅延を追加し、2 番目の「発送済み注文」メールを送信したいと考えています。現在、この 2 つのファイルがあります。必要な遅延を追加するには、どのような変更を行う必要があるか教えてください。

前もって感謝します。

orders_controller.rb

def create

    @order = Order.new(params[:order])
    @order.add_line_items_from_cart(current_cart)

    respond_to do |format|
      if @order.save
        Cart.destroy(session[:cart_id])
        session[:cart_id] = nil
        OrderNotifier.received(@order).deliver
        #Mail after 5 miutes to inform order is Shipped
        OrderNotifier.delay.shipped(@order)
        format.html { redirect_to store_url, notice: I18n.t('.thanks') }
        format.json { render json: @order, status: :created, location: @order }
      else
        @cart = current_cart
        format.html { render action: "new" }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

order_notifier.rb

class OrderNotifier < ActionMailer::Base

  default from: 'sam ruby <depot@example.com>'


  def received(order)
    @order = order
    mail to: order.email, subject: 'Pragmatic Store Order Confirmation'
  end


  def shipped(order)
    @order = order
    mail to: order.email, subject: 'Pragmatic Store Order Shipped'
  end
  handle_asynchronously :shipped, :run_at => Proc.new { 5.minutes.from_now }
end

上記の変更をコードに加えました。

rake jobs:work でエラーが発生します

[Worker(pid:8300)] Job OrderNotifier#shipped_without_delay (id=31) RUNNING [Worker(pid:8300)] Job OrderNotifier#shipped_without_delay (id=31) 失敗 (0 以前NoMethodError: 未定義のメソッド[]' for nil:NilClass [Worker(id:8300)] 1 jobs processed at 1.5796 j/s, 1 failed [Worker(pid:8300)] Job OrderNotifier#shipped_without_delay (id=31) RUNNING [Worker(pid:8300)] Job OrderNotifier#shipped_without_delay (id=31) FAILED (1 prior attempts) with NoMethodError: undefined method []' for nil:NilClass [Worker(pid:8300)] 6.3007 j/s で 1 つのジョブが処理され、1 つのジョブが失敗しました

4

2 に答える 2

1

Matttherick は正しいです。これはコントローラーの外部で処理する必要があります。しかし、DelayedJob よりも Sidekiq を強くお勧めします。はるかに大量のジョブを処理でき、より安定していることがわかりました。

https://github.com/mperham/sidekiq

具体的に送信するには、https://github.com/mperham/sidekiq/wiki/Delayed-Extensionsを参照してください。

于 2013-09-17T16:15:23.017 に答える