Rails 3 中为长时间运行的应用程序向用户发回状态的首选方式是什么?
泰,弗雷德
建议在后台进程中执行冗长的任务,并尽快/立即从主函数返回。
查看Ruby on Rails 的答案:如何在后台运行?和Rails 中的后台处理,以了解使用 Rails 进行后台处理的一些选项。
让那个长时间运行的应用程序将其状态写入 Rails 可以读取的固定位置。状态通常有两种形式,一个在1-100范围内不断增加的数字,用于进度显示,或者一个状态,即“读、处理、写”。
然后你必须开发一个 AJAX 控制器动作来读取那个文件。创建 AJAX 操作触发时运行的相应 javaScript 文件。
即在 app/controllers/some_controller.rb
def get_status
@status = File.open("#{Rails.root.to_s}/tmp/lrp_status.txt","rb") { |f| f.read }
end
然后在 app/views/some/get_status.js.erb 中:
$('#my_status_div').html('<p> the status is <%= @status %></p>');
然后你必须使用你喜欢的计时器 javascript thingy 设置一些 javascript。这里的重点是每隔(?1 秒),触发 get_status AJAX 调用。