Delayed_job: как использовать handle_asynchronously для работы с функцией? - PullRequest
6 голосов
/ 19 марта 2011

Функция:

def createuser(name,pass,time)
   puts name,pass,time
end

Я пытаюсь:

handle_asynchronously :createuser("a","b","c")

и получил ошибку: синтаксическая ошибка, неожиданный '(', ожидание keyword_end

спасибоyou.

=== EDIT ===

база данных пользователей в Японии и веб-сервер в Пекине. Поэтому я использую этот способ для создания пользователя.

def createuser(name,pass,time)
   Net::HTTP.get(URI.parse("http://www.example.net/builduser.php?hao=#{name}&mi=#{pass}&da=#{time}"))
end

Ответы [ 2 ]

10 голосов
/ 19 марта 2011

Вам не нужно передавать параметры в метод handle_asynchronously, это просто способ сказать, что ваш метод всегда должен передаваться в delayed_job.

Итак, в вашем примере:

def create_user(name,pass,time)
  puts name,pass,time
end
handle_asynchronously :create_user

делает именно то, что вам нужно. Когда вы звоните

create_user('john','foo',Time.now)

- это то же самое, что звонить

delay.create_user('john','foo',Time.now)

Я только что настроил тестовое приложение, делающее именно это, чтобы проверить ответ, и вот сериализуемый обработчик delayed_job:

--- !ruby/struct:Delayed::PerformableMethod
object: !ruby/ActiveRecord:User
attributes: 
   name: 
   pass:
   created_at:
   updated_at: 
   method_name: :create_user_without_delay
     args: 
       - John
       - foo
       - 2011-03-19 10:45:40.290526 -04:00
3 голосов
/ 19 марта 2011

Почему вы хотите передать параметры в метод? Потому что проблема в том, * я думаю *, что вы должны использовать это следующим образом:

def create_user
  # do some delayed stuff here
end

handle_asynchronously :create_user, :run_at => Proc.new { 10.minutes.from_now }

или

handle_asynchronously :create_user, :priority => 10

и т.д.. (поэтому без передачи каких-либо параметров методу, который вы передаете в качестве параметра handle_asynchronously).

EDIT

Задержка - это длительная задача, которую вы хотите выполнять асинхронно. handle_asynchronously вызывается один раз, сразу после объявления метода, поэтому передача параметров бесполезна, потому что код внутри метода также разделяет эту область действия!

...