Delayed_job

Witam.

Staram się wysłac jedno zadnia w tło za pomocą delayed_job.
Wygląda to tak:

OverviewCOntroller

[code=“ruby”]require ‘delayed_download.rb’

def all
Delayed::Job.enqueue DelayedDownload.new
end[/code]
delayed_download.rb

class DelayedDownload def perform #Tu kod który zaciąga dane z innego serwisu. Nie przekazuje tu żadnych parametrów. end end
Po odpaleniu dostaję taki błąd:

wrong number of arguments (0 for 1)
wskazanie lidni błedu: OverviewController linia Delayed::Job.enqueue DelayedDownload.new
W czym jest problem, niby oczekiwany jest 1 parametr. Tylko gdzie?

Pozdrawiam

Najprawdopodobniej w DelayedDownload.new. A jak wygląda definicja DelayedDownload?

chodzi o to co jest w perform w klasie DelayDownload ?

Masz w DelayedDownload zdefiniowane initialize może?

nie, tylko perform

Pokaż definicję DelayedDownload, albo chociaż pierwszą linijkę tam są zdefiniowane parametry

np. class ProcessNotification < Struct.new(:entry_id, :entry_type, :user_id, :added_at)

plik overview_controller.rb:

[code=“ruby”]class OverviewController < ApplicationController

require ‘delayed_download.rb’

def index
Delayed::Job.enqueue DelayedDownload.new
end
end[/code]
delayed_download.rb:

[code=“ruby”]class DelayedDownload
gem ‘soap4r’
require ‘soap/WSDLDriver’
require ‘xmlrpc/client’

def perform
tu moge wpisac farmazony a i tak aplikacja noie wywala błędu, wygląda jak by się to w ogóle nie wykonywało.
end
end[/code]
Co może być powodem że perform w ogóle sie nie wykonuje?
Ogólnie do pliku wchodzi, ale nie do perform.

Jak przed def perform wpiszę cokolwiek błędnego to wywala błąd jak za, to nie wywala błędu.
CO może być powodem.
To jest najprostsza aplikacja z wykożystaniem delayed_job, tak dla testu jak to działa.

A spróbuj stworzyć sam obiekt DelayedDownload w konsoli i może usuń z definicji klasy require i gem.

Jak tworze obiek w konsoli mam taki efekt:

irb(main):002:0> require 'delayed_download.rb' => ["DelayedDownload"] irb(main):003:0> DelayedDownload.delay.new => #<Delayed::Backend::ActiveRecord::Job id: 36, priority: 0, attempts: 0, handl er: "--- !ruby/struct:Delayed::PerformableMethod \nobject...", last_error: nil, run_at: "2010-12-16 17:39:25", locked_at: nil, failed_at: nil, locked_by: nil, c reated_at: "2010-12-16 17:39:25", updated_at: "2010-12-16 17:39:25"> irb(main):004:0>
i tez perform z delayed_download.rb się nie wykonuje, bo w def perform mam specjalnie zrobiony błąd a nie wywala mi go.

Napisz DelayedDownload.new a nie DelayedDownload.delay.new

jak dam DelayedDownload.new to jest ok, nie ma błędów, wygląda jak by problem był z delayed_job

A widziałeś screencasta? :wink: http://railscasts.com/episodes/171-delayed-job

widziałem