非 Web Ruby 项目的框架

14

我正在寻找一个适用于非Web项目的简单Ruby框架。我非常熟悉Rails,所以当我写纯Ruby时,我会想念以下功能:

  • 不同的环境(开发、测试、生产
  • 控制台 rails c
  • rake或rails提供的其他实用工具

我知道我可以require ActiveSupport和相关库,但这不是我需要的。我主要想念的是开发框架。

我调查了一件事情,就是把我的项目做成gem包(即使最终我不需要一个gem包)。例如使用jeweler提供版本控制。我相信还有更好的方式,但我找不到任何方法。你会使用什么?


你的项目需要一个数据库后端吗? - Andrew Grimm
除非你不确定想要什么,否则能否多描述一下你所需要的?例如,你想要一个可以这样说 foo generate classname 并创建 lib/application/classname.rbtest/tc_classname.rb,同时生成一个空的类和一个空的测试用例的东西吗? - Andrew Grimm
3个回答

10

好的,这是一个由三部分组成的问题。一个“threstion”,或者叫 triesti... 其实这个不太合适。那就用“Threstion”吧。

关于Rails的一件事情需要理解:它并不像神奇一样。它是由凡人编写的代码,他们有缺点(例如自负),但也非常聪明。因此,我们可以在研究他们的工作后理解它。

1. Rails环境很可爱

Rails环境管理背后的代码实际上非常简单。你有一个默认环境,它被设置为 development,具体见这行代码在railties/lib/rails/commands/server.rb。你可以在你的应用程序中做类似的事情。运行一些初始化代码,定义 YourAwesomeThing.environment = ENV["AWESOME_ENV"] || "development"。然后,在需要的地方引入 config/environments/#{YourAwesomeThing.environment}.rb。接下来,在这些文件中有一些配置,根据环境修改库的工作方式。

我找不到在3-1-stable中执行该操作的那一行代码(它已经不见了),所以这里有一个我认为是在3-0-stable分支中执行该操作的代码。

至于诸如 Rails.env.production? 这样的可爱方法,它们由 ActiveSupport::StringInquirer 类提供。

2. Rails控制台是“再来一次”

我认为rails console非常棒。我不想像在PHP的黑暗年代那样创建一个新文件来手动测试一些代码。我可以进入控制台,在那里尝试并输入exit来结束测试。太棒了。我认为Rails开发人员没有足够重视控制台。

无论如何,这只是加载了Rails环境的irb会话!我再次强调:Rails并不是魔法。如果你打开irb,然后在这个交互式终端中键入require 'config/environment',你将得到(至少在我所知道的范围内...)与Rails控制台相同的结果!

这是由于Rails初始化过程中发生的奇妙操作,它几乎是魔法,但不完全如此,并且我已经在初始化指南中解释了这一点,该指南很快就会更新到Rails 3.1版本!

通过阅读那篇看似比乔治·R·R·马丁或罗伯特·乔丹写的书还要长的文本,您可能会学到很多。我肯定学到了很多写它的过程中!

3. 其他实用程序

这就是我犹豫不决的地方。您需要从Rake / Rails中获取哪些其他实用程序?一切都在那里,您只需要挑选出需要的部分,这实际上相当简单...但是,除非您先尝试并具体问题具体分析,否则我无法告诉您如何做。


无论如何,这是一个令我兴奋的问题,感谢您给我带来的娱乐 :)

编辑

我注意到你问题末尾的额外第四个问题。版本控制的目的是什么?为什么不使用像Git这样的版本控制系统来做这件事,并根据需要使用git tag标记版本?我认为这将是最合理的做法。

有各种类型的答案,但像这样的答案创造了它们自己的类别 :) - DBA
我不喜欢这个答案 - 我不喜欢重复造轮子。有没有现成的非网络应用程序可供使用? - Nowaker
我也不喜欢这个“答案”,如果你能称之为答案的话。这个问题并不是在寻求Rails如何工作的解释,而是在问是否存在一个非Web Ruby项目的框架。 - Volte

2
首先,Rails作为一个Web框架的目标是让你大部分时间都忘记与Web服务器、数据库等低级细节的交互,并为你提供高级抽象,使你能够集中精力完成实际工作:完成你的应用程序。
非Web应用程序的多样性是如此之大,以至于根本不可能有一个“适用于所有”的框架。
了解什么是框架以及何时以及为什么要使用它是有用的。
假设你需要建造一只狗屋。你可以购买一些木材、钉子和锤子,从头开始按照自己的想法建造,或者你可以去沃尔玛购买一个DIY狗屋套件。 你将得到一份详细说明如何建造您的“梦想狗屋”的手册,您将更快地完成它而不是从头开始制作,但您将受到其限制的木材和可能被迫使用他们的钉子或螺丝钉,在某些情况下,您还需要购买特殊的螺丝刀。
DIY套件就是你的框架。一些聪明的家伙已经为您提供了制作狗屋的基本工具,您只需要找出(或不需要,如果您有手册)如何在他们的“框架”下进行操作。
现在,假设你要建造一座摩天大楼。所使用的材料、工具和约定(框架)可能与建造狗屋时不同,并且使用“摩天大楼框架”来建造狗屋可能会过度设计。
您不会使用相同的工具和约定来编写Twitter客户端和编写具有十亿并发用户的银行应用程序。
Rails只是提供了一套许多非常好(且有用)的约定来编写Web应用程序的框架之一,但这并不一定意味着它是最终选择。您可以选择另一个框架,也许您会喜欢编写应用程序的约定甚至比Rails提供的更好;或者您可以从头开始编写所有内容,这将不限制您使用特定框架提供的内容,并可能使其变得更好。
回答您的问题:考虑您想编写什么,并不要让自己被框架提供的一组工具和约定所限制,如果您选择这条路,它们肯定会被限制。
购买一些关于设计模式的书籍并阅读一些优秀的软件,那么您可能会理解为什么作者没有选择应用程序框架。事实上,他们已经开发了自己的约定并定义了它应该做什么行为;再次强调,“Rails方式”不是唯一的方式,这并不意味着它是错误的方式。 :)
我会感激建设性的批评,因为我确实尽力提供一个好的答案。

很抱歉,我不确定这实际上是否回答了问题。我认为他对学习Rails的工作原理感兴趣,以便能够借鉴其中的思想并应用到自己的项目中。除此之外,这是一个非常写得很好的回答!我们在SO上需要更多这样的回答。 - Ryan Bigg
谢谢你指出这一点,Ryan。我意识到我的回答只是对原问题的一半回答,但我不认为它完全离题。 - Kenny Meyer
我从未见过一个不需要任何框架就能开发出复杂应用的情况。框架有助于明确各个组件的位置并简化维护。如果你想自己开发框架,当然可以,但通常使用已经由许多比你聪明的人付出努力创建和记录的框架会更省力。 - Marnen Laibow-Koser

1
你看过Monkeybars吗?它是一个基于Rails思想的MVC框架,运行在JRuby和Swing之上,用于构建桌面应用程序。我非常喜欢它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接