2011-08-16 56 views
2

假设性的问题(目前!)Rails应用程序与非HTTP访问

假设我有一个应用程序一个好主意。它使用关系数据库中的表格很好地表示数据,并使用表示这些表格的互连对象。它支持定义良好的API,用于与(创建,读取,更新,删除)这些对象进行交互,并查看关于它们的信息。

简而言之,这是一个完美的适合Rails ...除了它不想成为一个Web应用程序。也许它需要命令行界面;或一个OS本机基于对话框的界面;或者也许它想将自己作为资源展示给其他应用程序。无论如何 - 它只是没有被设计为通过HTTP呈现自己。

Thesequestions暗示这肯定是可能的,但是从适应现有web-app的角度来看,这两个问题都有一个额外的非web界面。

我很想知道什么是创建这样的应用程序的最佳途径。你最好是rails new non_web_app,为了获得“免费”构建的骨架,然后编写一些“正常”的Ruby代码require s config/environment - 但是,然后你有很多网络中心cruft,你不需要?或者最好是卷起袖子并用整块布做成,只需要你需要的库并手动编写任何所需的配置?

如果是后者,究竟是什么需要制作一个Rails应用程序,但没有web位?

回答

4

如果您想访问Rails ORM来开发一个CRUD非Web应用程序,只需在您自己的Ruby脚本中包含ActiveRecord;您将避免使用大量您可能不需要的Rails模块(路由,模板生成器,...)Here is an example of how to do it

如果您希望拥有完整的Rails堆栈,请不要在应用程序服务器(WEBrick,Passenger,Mongrel等)中运行Rails Web应用程序以避免任何HTTP暴露,并使用任务与应用程序交互或轨道控制台。

+0

“只要包含ActiveRecord” - 足够公平,但它至少也需要配置数据库详细信息。基本上,需要什么来引导基于AR的CRUD应用程序,如果不是从“开始使用Rails和剥离位”路线开始的话? – Chowlett

+0

请检查答案中现在包含的链接。 – lbz

+0

啊,谢谢,这确实解释了它。非常简单,真的。 – Chowlett

0

我会避免把Rails放在离轨太远的地方。如果我是这样做的,认为轨的增益W/O网络的东西我会做到以下几点:

rails new non_web_app 

,并忽略webbish克鲁夫特和使用的轨道,从而生成模型。通过这种方式,您可以获得紧凑舒适的数据库行为,并可以根据需要添加各种宝石,从而扩充这些模型。当然,我不打扰实现视图,我会考虑实现控制器,其中各种渲染位被删除,并使用您实例化控制器的实例并直接调用操作。这意味着控制器仍将您的API代表到业务逻辑中,但它现在“呈现”的“视图”仅仅是数据输出的返回。

然后,你可以简单地去掉你不需要的位......公共目录,应用程序下的视图结构,config/routes.rb等等。你需要逐步测试这些变化,并确保删除一些现在无关的位并不会导致Rails世界陷入混乱。

0

Rails适用于Web应用程序。这意味着HTTP。现在,您可以打包一个Web应用程序,以便它可以在桌面上运行,或者您可以将ActiveRecord与类似Monkeybars的桌面应用程序框架一起使用。