我有一个应用程序,其中attr_accessor用于保存模型的临时数据,该模型将传递给rake任务。看到没有这些属性的数据库字段,并且它们不是从数据库数据计算的,attr_accessor数据是否会持续存在并且可用于rake任务?如果我需要重新启动服务器会发生什么 - 如果数据没有保存到数据库,数据会丢失吗?或者,为了解决此问题,我是否需要保存到临时文件或数据库字段?
答案 0 :(得分:7)
我假设您在询问通过Rake任务访问它们时,存储在源自Web请求的ActiveRecord对象属性中的数据是否可用?
没有。他们不会。该数据甚至无法用于下一个Web请求。如果你加载两次相同的记录,那些数据甚至都不存在。
class Thing < ActiveRecord::Base
attr_accessor :data
end
#try this in script/console
thing = Thing.find(:first)
thing.data = "Something"
thing = Thing.find(:first)
puts thing.data
-> nil
答案 1 :(得分:-1)
这取决于您将数据传递给rake任务的方式以及原因。如果您尝试使用请求进行带外工作,这意味着不要让用户等到完成,我建议您在这里查看Ryan优秀的截屏视频http://railscasts.com/episodes/128-starling-and-workling以了解工作队列。
如果它有一些其他奇特的原因你必须使用这样的rake,你可以将数据作为命令行参数传递。这取决于您需要传递多少数据及其复杂性,因为它可能会很快失控。
使用Daniel的上述例子:
thing = Thing.find(:first) thing.data =“Something”
rake myraketask thing_id=#{thing.id} data=#{thing.data}
答案 2 :(得分:-3)
当然它会丢失,你认为数据何时消失?对于数据h(e)aven,它始终可以返回?
我想知道你需要什么数据,但最终的答案可能是数据属于数据库,除非它是大型二进制数据,如图像,你应该将它保存在文件系统中。