2011-07-10 34 views
16

Tôi đã thêm đá quý delayed_job để gemfile tôi và cài đặt một cách chính xác nhưng khi tôi cố gắng để chạy các dòng sau:liên tục bị trì hoãn uninitialized :: Job

Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 

tôi nhận được lỗi 'liên tục bị trì hoãn uninitialized :: Job '

Ai đó có thể giải thích những gì tôi cần làm ở đây không? Tôi đã thử chạy 'rake jobs: work' trước nhưng nó cũng trả về lỗi 'Uninitialized constant Delayed :: Job'. Ngoài ra, tôi đã thêm "require 'delay_job'" vào tệp (application.rb) mà không có nhiều may mắn.

Trả lời

12

Bạn có làm theo hướng dẫn cài đặt trên tệp README không? https://github.com/collectiveidea/delayed_job

Thêm phần này vào gemfile của bạn:

gem 'delayed_job_active_record' 

và sau đó chạy này tại giao diện điều khiển:

$ rails generate delayed_job:active_record 
$ rake db:migrate 

Bạn cần phải tạo bảng công việc chậm trễ trong cơ sở dữ liệu (điều này giả định bạn sử dụng bản ghi hoạt động).

Đối với Rails 3, tất cả những gì bạn cần làm là đưa nó vào gemfile, chạy mã trên để tạo bảng và di chuyển cơ sở dữ liệu, sau đó khởi động lại máy chủ của bạn và tiếp tục!

+1

Ngoài ra hãy chắc chắn rằng bạn thêm 'app/models/delayed_job.rb' là tốt. Không cần phải định nghĩa nhiều, chỉ chính lớp đó: 'class DelayedJob sorens

+0

@sorens bạn có thể xác nhận đó là một bước cần thiết không? –

+0

@just__matt Tôi tin như vậy, nhưng tôi chưa xác nhận điều đó. Bắt đầu một dự án đường ray mới, thêm đá quý delay_job, bỏ qua mô hình và xem. – sorens

1

tôi đã phải vật lộn một lúc trước với cùng một vấn đề. tôi đã theo dõi ryan bates screencast trên delay_job và có cùng một lỗi 'uninitialized constant Delayed :: Job'. Trong ryan màn hình tạo ra một tập tin gọi là mailing_job.rb (nằm trong thư mục lib) với phương thức thực hiện delay_job bên trong, cho phép bạn sử dụng phương thức enqueue. Sau khi thực hiện một số nghiên cứu tôi thấy rằng đường ray 3 không tự động tải các tập tin thư mục lib vào ứng dụng của bạn (không hoàn toàn chắc chắn)

Hãy thử
này Trong điều khiển của bạn mà bạn sử dụng này:.

"Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc" 

Hãy thử yêu cầu tệp như thế này.

require 'mailing_job' 
class AssetsController < ApplicationController 
    def some_method 
     Delayed::Job.enqueue do_it(), 0, 1.minutes.from_now.getutc 
    end 
end 
2

Chỉ trong trường hợp, nếu điều này vẫn chưa được trả lời, đánh dấu vào liên kết dưới đây

http://www.pipetodevnull.com/past/2010/4/14/uninitialized_constant_delayedjob/

chỉnh sửa: Alternative, chỉ cần nâng cấp lên phiên bản mới nhất - 2.1

+1

Điều này giải quyết vấn đề của tôi, nhưng liên kết có 1 dòng mã, bạn có thể dễ dàng dán nó ở đây. – lfzawacki

+0

Bị trì hoãn :: Worker.backend =: active_record – ReggieB

18

Nếu bạn đã nâng cấp lên phiên bản delay_job> = 3 bạn sẽ cần phải thêm điều này (giả sử bạn đang sử dụng ActiveRecord):

# Gemfile 
gem 'delayed_job_active_record' 
+1

Rất hữu ích - Tôi gặp vấn đề đó. Hoàn thành sang một bên nhưng để cứu người khác đánh nó, tôi cũng phải cập nhật cách sử dụng Paperclip của mình từ 'gem' aws-s3'' thành 'gem 'aws-sdk'' –

+2

Xem" Nâng cấp từ 2.x lên 3.0.0 trên Active Record "ở đây: https://github.com/collectiveidea/delayed_job – Cam

+0

Điều này cố định vấn đề của tôi di chuyển đến một đống tuyết tùng trên Heroku cùng với bình luận của Peter về aws. Cảm ơn! – jbg

0

Khả năng thay đổi phiên bản: nếu bạn nhảy từ phiên bản 2.1.x sang phiên bản 3.x của đá quý qua gói không khóa, bạn có thể gặp sự cố tương tự.

7

Tôi đang sử dụng công việc bị trì hoãn trong một công cụ (vì vậy đá quý được chỉ định trong một .gemspec chứ không phải Gemfile) và đã nhận được lỗi tương tự.Tôi thấy rằng tôi có thể giải quyết vấn đề bằng cách sử dụng:

require 'delayed_job_active_record' # fixes problem 

hơn

require 'delayed_job'    # doesn't 
+0

Câu trả lời này đã được thực hiện hai lần về câu hỏi này. –

+2

Không có. Điểm mấu chốt là trong một động cơ tôi đã phải sử dụng cụ thể một tuyên bố yêu cầu. Các câu trả lời khác đề cập đến các ứng dụng đường ray chuẩn, khi sử dụng "gem" delay_job_active_record '"trong Gemfile là đủ. Đây không phải là trường hợp của một công cụ mà gem được định nghĩa trong gemspec, và sau đó bạn cần sử dụng một câu lệnh require trong đó mã gem cần thiết trong mã của bạn. – ReggieB

+0

Có yêu cầu tuyên bố này không! Cảm ơn bạn. –

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