【问题标题】:Delayed_job: how to use handle_asynchronously to work with a function?Delayed_job:如何使用 handle_asynchronously 来处理函数?
【发布时间】:2011-07-18 17:50:39
【问题描述】:

函数是:

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

我试试:

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

得到一个错误:语法错误,意外'(',期待keyword_end

谢谢。

===编辑===

日本的用户数据库和北京的网络服务器。所以我用这种方式来创建用户。

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

【问题讨论】:

  • 感谢您的编辑。你现在可以显示调用部分吗?你在哪里调用handle_asynchronously?就在声明之后?其他地方?
  • 嗨。我正在使用 Unixmonkey 的方式。它现在工作正常。谢谢。

标签: ruby ruby-on-rails-3 gem delayed-job


【解决方案1】:

为什么要向方法传递参数?因为问题是 * 我认为 * 你应该这样使用它:

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 的方法)。

编辑

延迟作业是您希望异步执行的长时间运行的任务。 handle_asynchronously 被调用一次,就在方法声明之后,所以传递参数是没有用的,因为方法内的代码也共享该范围!

【讨论】:

  • 我想传递参数。像这样createuser("a","b","c")。如果我使用handle_asynchronously我不能把参数给createuser。
  • 是的,我认为你不能这就是问题所在。我浏览了许多使用 handle_asynchronously 的示例,但没有一个将参数传递给该方法。问题是你在哪里定义这个方法,为什么你需要传递这些参数?使用延迟工作时这样做的目标是什么?
  • 查看我的编辑。我自己对此很好奇,也许我们可以按照您的要求进行操作,但从设计的角度来看,您为什么要异步创建 ONE 用户?
  • 是的。我想异步创建一个用户
  • 这甚至不是用户数量的问题,而是将“常量”参数传递给您的方法。如果有常量直接在您的方法中使用它们而不传递它们。 handle_asynchronously 方法在方法定义后调用一次。你能告诉我你想要完成什么吗?放轻松:)
【解决方案2】:

您不需要将参数传递给 handle_asynchronously 方法,这只是说明您的方法应该始终传递给 delay_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)

我只是设置了一个测试应用程序来测试答案,这里是延迟作业序列化的可执行处理程序:

--- !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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2017-11-27
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多