2017-02-23 17 views
1

У меня есть приложение rails, где заказ присваивается поставщику, и поставщик должен принять заказ в течение следующих 15 минут (для целей тестирования я сохраняю его до двух минут). Как только заказ назначается поставщику, атрибут статуса в таблице назначения заказов для заказов и поставщиков обновляется до назначенного. Теперь поставщик должен принять или отклонить заказ, на основании которого статус обновляется до принятого и отклоненного соответственно. Если продавец не принимает/отклоняет заказ в течение следующих 15 минут с момента назначения, статус автоматически обновляется до отклонения в таблице назначения заказа. Вот фрагментыПланировщик Работа не работает в Rails 4

OrderAssignment модель:

class Estamps::OrderAssignment < ActiveRecord::Base 
belongs_to :vendor, class_name: 'Estamps::Vendor' 
belongs_to :order, class_name: 'Estamps::Order' 
belongs_to :status, class_name: 'Estamps::OrderAssignments::Status' 


after_save :enqueue_check_status 

def enqueue_check_status 
    AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id) 
    if self.status_id == 3 
    OnRejectionJob.perform_later(self.id) 
    end 
end 

end 

Модель заказа:

has_many :order_assignments 
belongs_to :vendor 

Производитель Модель:

has_many :order_assignments 
has_many :orders 

Auto_rejection_job

class AutoRejectionJob < ActiveJob::Base 
queue_as :auto_rejection 

def perform(order_assignment_id) 
    order_assignment = Estamps::OrderAssignment.find(order_assignment_id) 
    if order_assignment 
     if order_assignment.status_id == 1 
      order_assignment.update_attribute('status_id', '3') 
      order_assignment.save! 
     end 
    end 
end 
end   

OrderAssignment схема:

create_table "estamps_order_assignments", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "vendor_id" 
    t.integer "order_id" 
    t.integer "status_id" 
end 

Здесь status_id приходит из другой таблицы, которая содержит различные статусы.

Теперь после создания записи о назначении заказа, когда статус изначально назначается (status_id: 1), если поставщик не обновляет статус, то status_id автоматически обновляется до status_id: 3 (отклонено). Это я пытался достичь в auto_rejection_job. Но хотя, работа показана как enqued, status_id не обновляется. Задание было правильно работать, когда я запустил его на консоли, как

AutoRejectionJob.set(wait: 2.minutes).**perform_now**(an id), 

то status_id обновляется, но не работает на указанный запланировано time.Where я буду неправильно? Хоу, могу ли я это достичь? Новичок для рельсов, поэтому, пожалуйста, помогите.

+0

Вам не нужно сохранять модель после update_attribute. –

+0

@AleksanderLopez - я отредактирую это спасибо. Можете ли вы помочь мне с основной проблемой? –

ответ

0

Я предполагаю, что вы не начали рабочий процесс. Как описано в http://edgeguides.rubyonrails.org/active_job_basics.html, вы можете настроить группу различных серверов очередей.

Если вы хотите использовать Sidekiq, добавьте sidekiq камень

gem 'sidekiq' 

беги 'расслоение', чтобы установить

Настройка sidekiq как бэкэндом

# config/application.rb 
module YourApp 
    class Application < Rails::Application 
    # Be sure to have the adapter's gem in your Gemfile 
    # and follow the adapter's specific installation 
    # and deployment instructions. 
    config.active_job.queue_adapter = :sidekiq 
    end 
end 

The вам нужно иметь sidekiq бежит в сторону вашего сервера рельсов

$ bundle exec sidekiq 
+0

На самом деле, у меня есть resque_scheduler, отбросив мой сервер –

+0

Не могли бы вы опубликовать журнал resque? –

+0

Я пробовал использовать ботинок sidekiq и следовал тем же самым шагам, о которых вы говорили. Однако ничего не меняется. –

Смежные вопросы