首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3异步外部程序

Rails 3异步外部程序
EN

Stack Overflow用户
提问于 2012-10-08 10:27:22
回答 2查看 648关注 0票数 1

我正在Rails 3.2.8下设计一个web服务,它将为用户执行外部程序,预期的用例是:

1)用户填写参数表单并提交请求

2) Rails根据用户请求执行Matlab程序。它将持续几分钟(不到3分钟),并生成一个结果文件,表明程序已完成

3)在此过程中,将用户重定向到页面会显示“正在加载”状态,并监控结果文件是否已生成

4)生成结果文件后,通过AJAX重新加载页面并显示结果。

有没有一种"rails“方法可以做到这一点?我以前在JAVA SSH框架中这样做过,但是非常痛苦。我需要什么工具?例如,我是否需要像backgroundjob这样的gem来管理任务队列?或者有没有什么“一站式”的gem可以处理这个问题?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-08 21:06:54

使用多个作业队列提供程序之一。示例包括DelayedJob (有史以来最简单的一个,不需要额外的组件),Resque和Sidekiq (速度快得多,但你需要一个小的Redis服务器来使用它们)。

“作业”将是(取决于提供程序)实现执行的类或实例。如果这意味着在shell中运行某些东西,您可以这样做

代码语言:javascript
复制
%x[matlab command --options > output.ext]

(这只是一个例子,你也可以使用字符串插值:%x[#{executable_name}])

票数 0
EN

Stack Overflow用户

发布于 2012-10-13 12:04:49

我想出了在整个过程中应该使用什么:

1)用户填写参数表单,提交请求

使用rails cast中的方法:http://railscasts.com/episodes/219-active-model用于服务器端验证,gem ' client - side -validations‘启用客户端检查。

Matlab2) Rails根据用户请求执行程序。它将持续几分钟(不到3分钟),并生成一个结果文件,显示程序已完成

使用gem 'DelayedJob‘进行任务管理,使用'ChildProcess’启动Matlab程序。

3)在此过程中,将用户重定向到页面会显示“正在加载”状态,并监控结果文件是否已生成

监控子进程以及结果文件的存在,检查任务是否完成。

4)生成结果文件后,通过AJAX重新加载页面并显示结果。

使用rails cast:http://railscasts.com/episodes/229-polling-for-changes中的轮询方法更新结果页面。我没有使用推送,尽管它会更安全--因为轮询似乎是一种更轻量级的解决方案,可以满足我的需求。

显然,这不是最佳实践,但满足了我的需求,并且易于实现。感谢所有的评论和答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12774624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档