Rails是否适合与非以网络为中心的应用程序一起使用?

在我看来,Rails在构建以Web为中心的应用程序时非常出色,例如Agile书籍或Basecamp项目管理系统中提供的Depot在线商店应用程序。 这些应用程序的关键是它们的Web界面,Rails为您提供了快速,轻松,优雅地创建这些Web应用程序的工具。

但是如果你有一个带有命令行界面的应用程序,你想要添加一个前端呢? 例如,想象一个处理第三方EDI文件的应用程序 – 它从FTP服务器获取它们,解析它们,将数据插入数据库并通过电子邮件发送报告。 应用程序应该运行的时间表,应该生成哪些报告,谁应该收到电子邮件等等都在数据库中配置。 虽然应用程序的要点是EDI文件的处理,并且您希望通过cron运行它,但您希望构建一个网页,以允许用户管理他们接收的报告,接收报告的频率,等等

命令行应用程序和网页都需要访问数据库中的相同数据。 他们应该能够共享模型和业务逻辑。 如果命令行应用程序已经包含一个带有数据访问层的库,那么有没有办法在Rails中利用这个库? 或者,相反,有没有办法在外部应用程序中重用Rails的模型和控制器? 或者在这种情况下使用Rails作为Web框架没有意义?

如果您只想抽象出以数据库为中心的应用程序的模型层,您可以随时在常规ruby应用程序中包含ActiveRecord库(和ActiveSupport)。

实际上,大多数rails应用程序都有一个Web界面和一个命令行界面 – 通过rake

典型的例子是必须定期运行的批处理作业,不管是cron还是随时都可以运行。 但也可以手动运行这些任务。

如果我是你,我会尝试在lib/tasks中构建一些rake lib/tasks ,以便映射这些命令行命令。