Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当rails应用程序变得太大时该怎么办?_Ruby On Rails_Ruby_Design Patterns - Fatal编程技术网

Ruby on rails 当rails应用程序变得太大时该怎么办?

Ruby on rails 当rails应用程序变得太大时该怎么办?,ruby-on-rails,ruby,design-patterns,Ruby On Rails,Ruby,Design Patterns,我正在处理一个rails应用程序,它正在变得太大。启动需要很长的时间和大量的内存。我们有性能问题。测试非常慢。管理代码库、调试和引入新的未来变得越来越困难。我们正在考虑将应用程序拆分为更小的组件(Rails引擎或不同的Rails应用程序),所有组件将共享一个数据库。 考虑到这种情况,我们需要共享模型,可能是一些LIB、测试和一些GEM等。。。这听起来不适合我 是否可以应用任何模式?是的,有几种方法: 艾琳·斯文森·希利为我写了一篇很好的文章 及 Rails引擎正在接近 使用其他更适合高复杂性和更

我正在处理一个rails应用程序,它正在变得太大。启动需要很长的时间和大量的内存。我们有性能问题。测试非常慢。管理代码库、调试和引入新的未来变得越来越困难。我们正在考虑将应用程序拆分为更小的组件(Rails引擎或不同的Rails应用程序),所有组件将共享一个数据库。 考虑到这种情况,我们需要共享模型,可能是一些LIB、测试和一些GEM等。。。这听起来不适合我


是否可以应用任何模式?

是的,有几种方法:

  • 艾琳·斯文森·希利为我写了一篇很好的文章
  • Rails引擎正在接近
  • 使用其他更适合高复杂性和更面向PORO的框架
    另请参见Sandi Metz的“Ruby中的实用面向对象设计”。此外,观看她在互联网上的每一次演讲和讲话。Youtube是一个很好的起点。她是一位伟大的演说家。Rails是用Ruby编写的,Ruby是一种面向对象的语言,它带来了巨大的好处。但是探索面向对象的部分需要一些工作。Sandi会把你带到那里。

    这里有一些很好的建议来拆分一个Rails代码库,但是我认为在你应用任何一个代码之前,你需要停下来认真考虑你是如何进入这个位置的。所有这些解决方案都带来了新的复杂性和挑战。它们可能是值得权衡的,但前提是你要确保它们也能解决你今天遇到的问题

    记下你列出的每个痛点(启动时间慢,内存使用率高,性能差,休息性能差,开发速度慢),对它们进行“5个为什么”练习。为什么会发生这些事情。为什么应用程序会进入这种状态

    最重要的是,在提交一个大型应用程序之前,先考虑一下应用程序是否应该是大的。如果你的应用程序比你的产品要求更复杂,那么切换到同样复杂的服务集群并不是一种改进

    更具体地说,我建议不要在应用程序/服务/任何东西之间共享数据库访问。共享数据库的共享架构变得脆弱。它还导致了紧密耦合的服务,这些服务缺乏关注点的分离,您需要在开发速度上看到任何改进。正如将一个庞大的类拆分为几个紧密耦合的文件并不能改善它,将一个应用拆分为耦合的服务也不能改善它。 如果您必须维护一个大型应用程序,则需要隔离不同的关注点。为了做到这一点,您需要打破它们之间的依赖关系。基于我所看到的修复Rails巨石的努力,在现有应用程序中创建干净的界面,然后拆分组件比将应用程序拆分,然后希望生成的部分能够独立改进要成功得多