首先,我是Ruby / RoR的新手,所以你必须原谅我任何错误的术语,但希望我能够理解我的观点。
我构建了一个ruby应用程序,我需要使用rails添加一个非常简单的UI层。阅读a previous post of mine,彻底解释项目,让您了解它的作用。具体来看看我粘贴的树轮廓,以便您看到项目的现有文件结构。
我需要知道的是,如何将此现有项目转换为rails应用程序?我使用rails构建内容的经验总是从rails new app_name
开始,但绝不是这样的。任何提示将不胜感激。
答案 0 :(得分:2)
我看到了你的解析器脚本,它不是守护进程(一个在后台无限期运行的程序),对吗?
如果我没错,那么你有几种选择:
使用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应用程序中需要它,然后使用它。 我看到你原来的红宝石剧本几乎就在那里,它不应该让它成为一颗宝石。
答案 1 :(得分:1)
Rails只是"某事"在Ruby之上。特别是,您可以在任何地方使用Rails中的任何普通红宝石对象,这并不罕见(google" PORO")。
在你的情况下,我会按你用rails new
提到的方式创建一个简单的Rails应用程序。然后简单地重构你现有的代码,直到你有一个简单的独立类来完成你需要完成的工作,但从简单的ruby数据结构中获取输入/输出(即方法参数,返回值,没有全局状态,没有文件操作) 。然后,您可以在Rails控制器内部使用该类(从HTML表单输入,将输出呈现为HTML),也可以从脚本内部(从文件或STDIN读取输入,将输出呈现到STDOUT)。
你把这个课程放在哪里取决于你。在MVC范例中,它不是" C"或者" V",可以争论它是否是" M"。所以无论你喜欢什么,都要把它放进app/models/
或lib/
。
答案 2 :(得分:0)
这些都是很好的答案,我相信它们会完美无缺。但是,它们比我想要的要复杂一点。
我最终做的只是mver=$(make -f <(echo '$(warning $(MAKE_VERSION)) all:;') -q 2>&1 | awk '{print $NF}')
进入上面ruby应用程序所在的目录,然后只需运行cd
。 Rails会询问您是否要覆盖已存在的任何文件。从那里我只是将我的脚本集成到控制器动作中并创建了视图。