Ruby on rails 使用延迟作业递增
每当创建Ruby on rails 使用延迟作业递增,ruby-on-rails,ruby-on-rails-3,delayed-job,increment,Ruby On Rails,Ruby On Rails 3,Delayed Job,Increment,每当创建投资时,我试图将列(yest\u Holder\u count)的增量延迟一天,以便记录一天前在风险投资中进行投资的用户数(因此,我可以使用这些数据生成跟踪投资者数量的图表) 我认为最简单的方法是使用延迟的\u作业,但这不起作用。延迟的\u作业是在一个单独的表中创建的,根据SQLite DB浏览器,它会在一天后运行。但“是的股东计数”列不会增加。 Venture型号: def yest_increment self.increment!(:yest_shareholde
投资时,我试图将列(yest\u Holder\u count
)的增量延迟一天,以便记录一天前在风险投资中进行投资的用户数(因此,我可以使用这些数据生成跟踪投资者数量的图表)
我认为最简单的方法是使用延迟的\u作业
,但这不起作用。延迟的\u作业是在一个单独的表中创建的,根据SQLite DB浏览器,它会在一天后运行。但“是的股东计数”列不会增加。
Venture
型号:
def yest_increment
self.increment!(:yest_shareholder_count)
end
handle_asynchronously :yest_increment, :run_at => Proc.new {1.minute.from_now}
投资
控制器:
def create
@venture = Venture.find(params[:share_id])
@venture_increment= @venture.increment(:shareholder_count)
@venture_yest_increment= @venture.yest_increment
@investment = current_user.invest!(@venture)
if @venture_increment.save and @venture_yest_increment.save
respond_to do |format|
format.html {redirect_to @venture}
end
end
end
直接增量按其应发生的方式发生,但延迟增量永远不会发生
以下是delayed_jobs表中“handler”列的内容,以防有用:
--- !ruby/struct:Delayed::PerformableMethod
object: !ruby/ActiveRecord:Venture
attributes:
created_at: 2011-06-21 07:00:12.252808
onemth_shareholder_count: 0
updated_at: 2011-08-09 16:50:36.864354
onewk_shareholder_count: 0
shareholder_count: 4
id: 49
user_id: 40
yest_shareholder_count: 0
method_name: :yest_increment_without_delay
args: []
我不知道“没有延迟的是的增量”是从哪里来的,或者为什么“args”是空的
非常感谢您的帮助
编辑:我使用“1.minute.from\u now”而不是“1.day.from\u now”来测试代码。当您定义一个使用延迟作业异步处理的方法时,延迟作业会创建一个别名方法链(我不太熟悉)。它会导致调用由延迟作业处理的原始方法名称,当延迟作业到达该方法时,它会在没有延迟的情况下调用原始方法名称,即别名为的实际对象方法
没有参数,因为您没有将任何参数传递给yest\u increment
。如果将任何参数传递给yest\u increment
,它们将与作业一起保存,以便在延迟作业调用时传递给实际方法
表中的对象是对象的序列化版本,delayed_作业存储在db中。当作业需要运行时,它将通过反序列化创建一个对象,并使用给定参数调用该方法。由于该对象是ActiveRecord对象,反序列化包括从序列化对象检索id和从da查找对象塔巴斯
根据您的实际问题,它不起作用,不清楚什么不起作用。延迟的作业没有被调用,或者值没有增加,或者延迟的作业调用得太快。如果是最后一个,将代码更改为以下代码可能会有所帮助:
handle_asynchronously :yest_increment, :run_at => Proc.new {Time.now.beginning_of_day + 1.day}
谢谢你的回答。问题是该值没有增加。应该返回什么?它不会返回,因为延迟的作业将拦截调用而不调用该方法。从控制台无延迟地调用yest\u increment\u
正确吗?yest\u increment应该是增加的将yest_Holder_count列增加1,但一天后。您是否直接检查调用yest_increment_而不延迟
以查看增量是否有效?我询问了方法的返回值,因为行if@venture_increment.save和@venture_yest_increment.save