2011-07-07 21 views
5

Tôi muốn sử dụng delay_job để thực thi một chức năng từ bộ điều khiển. Các chức năng được lưu trữ trong mô-đun lib/site_request.rb:ruby ​​trên đường ray: delay_job không thực hiện chức năng từ mô-đun

module SiteRequest 

    def get_data(query) 
    ... 
    end 
    handle_asynchronously :get_data 

end 

query_controller.rb:

class QueryController < ApplicationController 

    include SiteRequest 

    def index 
    @query = Query.find_or_initialize_by_word(params[:query]) 
    if @query.new_record? 
     @query.save 
     get_data(@query) 
     flash[:notice] = "Request for data is sent to server." 
    end 
    end 

end 

Tôi cũng đã cố gắng để loại bỏ handle_asynchronously khoản từ mô-đun và sử dụng delay.get_data(@query), cả hai không thực hiện âm thầm (không có Mã công việc delay_job)

Trả lời

1

Tôi cũng gặp sự cố khi cố gắng sử dụng các phương thức chậm trễ tích hợp. Các mẫu tôi giải quyết trên trong mã hóa của riêng tôi là để enqueue DelayedJobs bản thân mình, cho họ một đối tượng tải trọng mà từ đó để làm việc. Điều này sẽ làm việc cho bạn quá và có vẻ có ý nghĩa ngay cả. (Bằng cách này, bạn có thể thậm chí không cần mô-đun SiteRequest của bạn, ví dụ.)

class MyModuleName < Struct.new(:query) 

    def perform 
    # TODO 
    end 

end 

Sau đó, thay vì gọi get_data(query) sau khi tiết kiệm, enqueue với:

Delayed::Job.enqueue(MyModuleName.new(query)) 
0

tôi thấy cùng một vấn đề. Môi trường của tôi là:

  1. của Ruby 2.1.7
  2. Rails 4.2.6
  3. activejob (4.2.6)
  4. delayed_job (4.1.2)
  5. delayed_job_active_record (4.1.1) MY giải pháp: Biến mô-đun thành một lớp học. Khởi tạo một đối tượng từ lớp và áp dụng phương thức cho cá thể. Dường như ActiveJob chỉ có thể enqueue trường hợp. Trong trường hợp của bạn:
Class SiteRequest 
    def initialize 
    end 
    def get_data(query) 
    ... 
    end 
    handle_asynchronously :get_data 
end 
def index 
    ... 

    q= SiteRequest.new 
    q.get_data(@query) 
    flash[:notice] = "Request for data is sent to server." 
end 

cuối

Các vấn đề liên quan