向现有 ruby 应用程序添加基本 UI 层

Add a basic UI layer to existing ruby app

首先,我是 Ruby/RoR 的新手,所以您必须原谅我的任何错误术语,但希望我能理解我的意思。

我构建了一个 ruby 应用程序,我需要使用 rails 添加一个非常简单的 UI 层。仔细阅读 ,它彻底解释了该项目,让您很好地了解它的作用。具体看一下我粘贴的树形轮廓,以便您看到项目的现有文件结构。

我需要知道的是,如何将这个现有项目转换为 rails 应用程序?我用 rails 构建东西的经验总是从 rails new app_name 开始,但从来没有像这样。如有任何提示,我们将不胜感激。

我看到了你的解析器脚本,它不是守护进程(一个在后台无限期保持 运行ning 的程序),对吧?

如果我是对的,那么你有几个选择:

最简单的选择

只需使用 rails new app_name 构建一个 rails 应用程序,然后在某些控制器操作中,对 运行 您的脚本进行系统调用

class SomeController
  def some_action
    succeeded = system(:ruby, '/path/to/main.rb', '/path/to/some.txt')
    # Do some rendering stuff here based on the result of the system call
  end
end

这种方法对我来说有点讨厌,而且性能不佳,因为每个系统调用都会读取您的 ruby 脚本并编译或解释它,然后 运行 执行它。

更难的选择

重构您的脚本,使其功能可以封装到 gem 中。 然后你安装 gem,在你的 rails 应用程序中需要它,然后使用它。 我看到你原来的 ruby 脚本已经差不多了,把它变成 gem.

应该不难

Rails 只是 Ruby 之上的 "something"。特别是,您可以在 Rails 内的任何地方使用任何普通的 ruby 对象,这并不罕见 (google "PORO").

对于您的情况,我会按照您在 rails new 中提到的方式制作一个简单的 Rails 应用程序。然后简单地重构你现有的代码,直到你有一个简单的、独立的 class 来完成你需要做的事情,但它的 input/output 来自简单的 ruby 数据结构(即方法参数,return 值,没有全局状态,没有文件操作)。然后,您可以在 Rails 控制器内部使用 class(从 HTML 表单获取输入,将输出呈现为 HTML),也可以在脚本内部使用(读取输入从文件或 STDIN,将输出渲染到 STDOUT)。

将 class 放在哪里由您决定。在 MVC 范例中,它不是 "C" 或 "V",并且可以争论它是否是 "M"。所以把它放入 app/models/lib/,随便你喜欢多少。

这些都是很好的答案,我相信它们会完美地工作。然而,它们比我要找的要复杂一点。

我最终做的只是 cd 进入 ruby 应用程序所在的目录,然后只是 运行 rails new app_name。 Rails 将询问您是否要覆盖任何已经存在的文件。从那里我只是将我的脚本集成到控制器操作中并创建了视图。