如何在ActiveAdmin或RailsAdmin中保持DRY,与主应用程序分离?

10
我正在构建一个仅限JSON的应用程序,它基本上是一个更精简的Rails,具有更少的中间件和模块。这是在Rails 4中构建的应用程序。
我想开发一个简单的应用程序来管理主应用程序中的数据库数据。为此,我想使用Active AdminRails Admin。但这两个选项都会使用底层模型及其验证、要求等来构建。
这意味着我至少需要在主应用程序和RailsAdmin应用程序之间共享模型。
我该如何最好地做到这一点?是否有一个很好的指南,介绍如何在与主应用程序分开的独立的Rails应用程序中构建管理应用程序,而不是将其集成?
另外提一下:将管理界面保留在与主应用程序分开的独立应用程序中,但使用共享数据库,还有一个很好的原因,那就是像ActiveAdmin这样的Gem会带来无数依赖项。

请注意,我不仅仅想在不同的域或不同的服务器上运行管理员,而是主要为了保持主要应用程序的简洁和聚焦。并且要避免像ActiveAdmin这样的依赖关系进入我的主要应用程序。


脚注:

  • ActiveAdmin和RailsAdmin本身并不会影响性能,问题在于它们需要中间件,而仅使用JSON的Rail应用程序只需要非常少的模块、辅助函数和中间件! Rails-API提供了如此简洁的堆栈。性能不是关于是否使用管理工具,而是关于全功能Rails与Rails-API之间的差别。
  • 性能不是我的主要问题,依赖和膨胀才是!我现在有一个Rails应用程序,它非常轻盈、专注和瘦身,可以与大多数Sinatra应用相媲美:)。只需三个额外的gems(每个gem自己都有一些依赖项)和一堆非常薄的中间件,我可以轻松地升级、管理和调试。

更实际的是:我没有使用Devise(这是一个JSON-API,因此使用令牌进行身份验证),没有任何视图或模板引擎。没有Formtastic,没有Paperclip,Rmagic,Kminari(分页器)等等。当我添加“管理员”时,所有这些都将被添加到我的应用程序中。


2
我会考虑将模型类提取到一个 gem 中,这样你就可以在两个应用程序中都引用它。很抱歉我无法提供具体建议,因为我从未实际尝试过,但理论上应该是可行的。你需要想办法共享 database.yml 文件,或者确保它在两个位置保持同步。 - Zach Kemp
谢谢提示。这确实听起来对我来说是一个非常好的解决方案。 - berkes
你最终做了什么,有任何更新吗?我发现自己处于同样的情况。 - elsurudo
2个回答

1

你有没有考虑过添加像ActiveAdmin这样的工具对你的REST API速度的影响?如果没有,那么这听起来像是一种过早优化的情况。

假如API速度真的会受到已加载但未使用的库的影响,那么你可以创建多个应用程序,并在Git子模块中共享模型。


是的,我做了,虽然很粗糙而且非常不科学 :). 添加完整的Rails堆栈几乎会使内存使用量翻倍。它将启动时间增加四倍(对于生产大多数情况下无关紧要),并且使得(其中一些)响应变慢了三倍。但是,正如我所说,将所有依赖项放在那里实际上更成问题。由于与ActiveAdmin需要的jQuery版本或RailsAdmin需要的上传器等不兼容性,我已经有过几个应用程序更新时出现故障的情况。 - berkes
我觉得很有趣,当你使用管理员时,在生产环境中响应速度会变慢。你看过这是从哪里来的吗?但正如我已经写过并且Zach也指出了,只需通过git子模块或gem共享您的模型即可。Bundler在此方面非常有帮助。 - phoet
phoet及其它:我添加了一些脚注以使我的有关性能的观点更加清晰。 - berkes

1

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