功能是:
def createuser(name,pass,time)
puts name,pass,time
end
我试试:
handle_asynchronously :createuser("a","b","c")
并出现错误:语法错误,意外'(',期待keyword_end
谢谢。=== EDIT ===
北京的japen和web服务器中的用户数据库。所以我用这种方式创建一个用户。
def createuser(name,pass,time)
Net::HTTP.get(URI.parse("http://www.example.net/builduser.php?hao=#{name}&mi=#{pass}&da=#{time}"))
end
答案 0 :(得分:10)
您不需要将参数传递给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
答案 1 :(得分:3)
为什么要将参数传递给方法?因为问题是*我认为*你应该这样使用它:
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在方法声明之后被调用一次,因此传递参数是没用的,因为方法中的代码也在共享该范围!