Ruby 关于 Rails 复杂操作的进展
Ruby on Rails Progress for Complex Actions
我是 Rails 的新手,我正在为用 Perl 编写的系统自动化工具构建前端。我已经构建了该应用程序,并且所有路线都在运行。我使用反引号 运行 Perl 命令,然后 return 标准输出。我有一个 运行s 通过控制器(节点 -> Bootstrap)的单一动作。
我的路线是这样的:
http://localhost:3000/nodes/1/bootstrap
为此路线调用方法 bootstrap,该路线又 运行 是一系列 Perl/shell 逻辑包装命令,以确保过程完成。
我的问题是生成的 HTML 页面是静态的,而我的过程是多步骤的。我需要一种显示步骤进度及其相关输出的方法。
refreshing/redirecting显示从一条路线发起的多个步骤的最简单方法是什么?
我认为您的要求不可能在一次 route/controller 操作中实现。
简化的控制流程如下所示:
- Rails 收到 HTTP 请求
- Rails 查看
routes.rb
以确定将请求传递给哪个控制器和操作。
- 控制器接收请求并运行执行适当的操作(在您的情况下包括一些由反引号执行的 Perl 命令),然后 呈现 某些内容(通常模板,但它可以只是纯文本,或没有消息正文的 HTTP 代码)或 重定向 到另一个操作。它只能重定向或呈现一次,不能两者都做。
- 如果您正在渲染一个视图,那么该视图中的 ERB(如果您使用的是默认的 ERB - 您可能正在使用类似 HAML 的东西)得到 运行 一次生成一些HTML,然后HTML在HTTP响应中发送回用户。
如果你想让你的页面更多'dynamic'那么你唯一真正的选择是使用Javascript修改页面的HTML客户端已经输出到用户。你问的实际上是一个相当复杂的任务,对于初学者来说可能是令人生畏的。
我个人会做一些事情,例如将 backticked_code_that_runs_the_perl_script
从控制器移动到后台作业,然后您使用 ActiveJob 排队。然后在前端我会写一些 Javascript 重复轮询您的后台作业以获取其状态,并相应地更新 DOM。
这是一个非常高级的描述,但我希望它能帮助您入门!
(请注意,直到 Rails 4.1 或 4.2 才添加 ActiveJob,我忘记了。如果您使用的是 Rails 的早期版本,它将不可用,您将必须单独使用 运行 像 Resque 这样的工作之一)
我是 Rails 的新手,我正在为用 Perl 编写的系统自动化工具构建前端。我已经构建了该应用程序,并且所有路线都在运行。我使用反引号 运行 Perl 命令,然后 return 标准输出。我有一个 运行s 通过控制器(节点 -> Bootstrap)的单一动作。
我的路线是这样的:
http://localhost:3000/nodes/1/bootstrap
为此路线调用方法 bootstrap,该路线又 运行 是一系列 Perl/shell 逻辑包装命令,以确保过程完成。
我的问题是生成的 HTML 页面是静态的,而我的过程是多步骤的。我需要一种显示步骤进度及其相关输出的方法。
refreshing/redirecting显示从一条路线发起的多个步骤的最简单方法是什么?
我认为您的要求不可能在一次 route/controller 操作中实现。
简化的控制流程如下所示:
- Rails 收到 HTTP 请求
- Rails 查看
routes.rb
以确定将请求传递给哪个控制器和操作。 - 控制器接收请求并运行执行适当的操作(在您的情况下包括一些由反引号执行的 Perl 命令),然后 呈现 某些内容(通常模板,但它可以只是纯文本,或没有消息正文的 HTTP 代码)或 重定向 到另一个操作。它只能重定向或呈现一次,不能两者都做。
- 如果您正在渲染一个视图,那么该视图中的 ERB(如果您使用的是默认的 ERB - 您可能正在使用类似 HAML 的东西)得到 运行 一次生成一些HTML,然后HTML在HTTP响应中发送回用户。
如果你想让你的页面更多'dynamic'那么你唯一真正的选择是使用Javascript修改页面的HTML客户端已经输出到用户。你问的实际上是一个相当复杂的任务,对于初学者来说可能是令人生畏的。
我个人会做一些事情,例如将 backticked_code_that_runs_the_perl_script
从控制器移动到后台作业,然后您使用 ActiveJob 排队。然后在前端我会写一些 Javascript 重复轮询您的后台作业以获取其状态,并相应地更新 DOM。
这是一个非常高级的描述,但我希望它能帮助您入门!
(请注意,直到 Rails 4.1 或 4.2 才添加 ActiveJob,我忘记了。如果您使用的是 Rails 的早期版本,它将不可用,您将必须单独使用 运行 像 Resque 这样的工作之一)