我和Django有点合作,我非常喜欢它的项目/应用程序模型:你可以通过组装一个或多个Django应用程序来构建一个Django项目。这些应用程序可以是自治的,或者某些应用程序可以构建在其他应用程序之上。应用程序可以轻松地依赖于另一个应用程序的模型,以及它的控制器(Django dudes称之为“视图”)甚至它的视图(Django中的“模板”)。
我现在正在开发一个相对大规模的Ruby on Rails项目,我很惊讶地发现在Rails中显然没有简单的方法可以做同样的事情。基本上,在Rails中,一个项目=一个应用程序。我们的项目已经开始作为一个巨大的单片应用程序,我们现在正试图弄清楚如何将它分成更小的块。
例如,我们当前的应用程序允许我们管理合作伙伴和合同(以及其他内容)。我希望有一个“合作伙伴”应用程序来管理我们的合作伙伴(地址,联系人等)和“合同”应用程序,它将管理我们与合作伙伴的合同。 “合同”应用程序将依赖于“合作伙伴”应用程序(但为了避免循环依赖,我希望“合作伙伴”应用程序不了解“合同”应用程序)。
目前,我认为以下是主要选项:
感谢您的建议。
答案 0 :(得分:5)
由于这是我也想做的事情,我可以提供四个 - 不完整且相对未经测试(由我)“解决方案”:
没有特别的顺序......
使用Rails engines插件,它现在显然适用于2.2。在某种程度上,这可能会进入Rails 2.3(见下文)
切换到 Merb,哪个 有一种叫做“切片”的东西 可能会提供你想要的东西。 无论如何,如果 this 是对的(我应该怀疑谁 Yehuda Katz?)它们都是一样的 无论如何,有一天,这很酷。
看看Edge Rails中的engines functionality(“Edge”是最新提交但尚未发布的版本,因此通常可以使用,但可能不是100%的生产质量)。
查看使用namespaces in routes.rb - 将app
中的项目分配给命名空间意味着您可以将其放入相关app
子目录中的子目录中,尽管这可能更少清理为每个“应用程序”都有一组单独的Rails目录。
其中,我没有(2)的经验,因为我(在基础设施方面)与Rails绑定,但是没关系,我喜欢Rails。我打算看一下(1)和也许(3),因为2.3可能会在我需要部署我的下一个主要版本之前发布,而我已经尝试过(4),它有效,但很好,很好一点点(对我而言)令人困惑。
答案 1 :(得分:2)
如果你想调查迈克的#2选项,那么Merb切片就是a screencast on the topic that is helpful。
答案 2 :(得分:2)
我使用过沙漠插件(以前称为“插件加”)。它似乎工作得很好。 http://github.com/pivotal/desert/tree/master
答案 3 :(得分:-2)
我认为RoR的方式是将你的“应用程序”编写为Rails中的控制器。他们可以相当独立但可以分享帮助者和观点。我不知道Django所以也许术语不同。