【问题标题】:What can I do to speed up Rails development mode?我可以做些什么来加快 Rails 开发模式?
【发布时间】:2009-08-12 00:25:23
【问题描述】:

Rails,在开发模式下很慢。非常非常慢。我运行Vista,我在development.rb中设置了config.cache_classes = true...但是,它仍然很慢,我必须在更改代码后重新启动服务器。

我的同事在 Mac 上开发 Rails 并看到类似的缓慢。

我的开发时间大大减慢,因为测试代码更改需要几分钟。

这和 Rails 开发一样好吗?还是我错过了一些能让我的生活变得快速而快乐的东西?

【问题讨论】:

  • 看来你只是在这里通过敲铁轨来发泄蒸汽。我不是 Rails 用户,但我也没有看到这里提出的实际有意义的问题。您是在询问 Rails 的可扩展性问题吗?您是否在询问是否可以解决您遇到的这种缓慢的问题?
  • 我不是在抨击 Rails。我喜欢使用 Rails 有很多原因,开发模式服务器速度不是其中之一。这不是可扩展性问题,而是开发速度问题。在易于编码方面,Rails 为我节省了大量时间。我想用更快的开发服务器节省更多。
  • 它在生产中运行得很快吗?
  • 是的,它在生产中运行得很快
  • @Blaenk 我知道性能是 RoR 社区的一个痛点,但这是一个痛点是有原因的:这是一个合理的批评。 OP发布的任何内容都没有远程接近“通过抨击铁轨在这里发泄蒸汽”。被问到的有意义的问题是,“我是否遗漏了一些能让它变得更快的东西?”

标签: ruby-on-rails windows development-environment


【解决方案1】:

rails-dev-boost 插件加速了 Rails 开发模式。我遇到了同样的问题,这个插件使我的应用程序非常敏捷(与每页几秒钟的加载相比)。它将以与生产类似的速度运行!

http://github.com/thedarkone/rails-dev-boost

安装它:

script/plugin install git://github.com/thedarkone/rails-dev-boost

【讨论】:

  • 刚刚试用了这个插件,它帮了很多忙——太棒了,谢谢!
  • 这颗宝石太棒了!!随着应用程序变得越来越大,我对开发环境变慢感到非常沮丧。这就像上帝派来的。
  • 正是我想要的。谢谢!!
【解决方案2】:

你在说什么:

  • 启动应用程序缓慢(如运行脚本/服务器)?

    如果是服务器启动,那你用的是什么服务器?根据我的经验,webrick 比 mongrel 慢,比 Thin 慢。对于本地开发,Passenger 确实是最有效的(尽管我从未尝试过让它在 Windows 上运行)。


  • 访问开发服务器时页面响应缓慢?

    这可能是数据库查询效率低下,视图中的计算过多可能需要重新处理等。如果它在生产中运行正常,这可能不是您的问题。但是,您运行的 Web 服务器也会影响您在本地的速度。我认为同样的启动顺序也适用于执行。


  • Rake 任务需要很长时间才能开始?

    我也遇到过这个问题。如果您有一个包含大量插件的大型项目(这意味着需要运行大量初始化),则可能需要一段时间来提升 rails 环境。有些事情可能会加快速度,但没有灵丹妙药。确保您没有安装任何不再使用的插件,仔细查看您的环境和初始化程序以确保它处于良好状态等。


底线是,说“Rails 开发缓慢”并不能真正指出问题所在。如果你能弄清楚什么是慢,那么你可以获得具体的帮助来加快速度。我曾参与过许多在开发和生产中都遇到性能问题的大型项目。如果给予适当的关注,我从来没有遇到过无法改善的情况。查明问题,您通常可以诊断出更好的解决方案来加快处理速度。

【讨论】:

    【解决方案3】:

    faster_require

    http://github.com/rdp/faster_require

    可能有帮助

    在 Windows 上显着加快挖矿速度

    spork 也可以与 jruby 一起使用来加速单元测试

    http://github.com/rdp/spork

    【讨论】:

      【解决方案4】:

      我也遇到过同样的问题。我的应用程序,在开发模式下,越来越慢。例如,我创建了一个带有新操作的新控制器:

        def test
          render :text => 'nothing'
        end
      

      在开发模式下,这需要 12-15 秒才能完成(通过 FF 和 IE 请求时)。我正在使用杂种(未聚集)。我在使用 macbook pro。

      在 prod 模式下,这大约需要 130 毫秒。

      必须有一种方法可以找出每个请求正在加载哪些文件(基本分析),以便我可以尝试找出发生了什么以及瓶颈在哪里。

      FF Firebug Net 显示大部分时间(11-14 秒)都处于等待状态。

      控制台显示:

      Completed in 2ms (View: 0, DB: 152)
      

      .

      有什么想法吗?

      【讨论】:

      • 我也遇到了同样的问题。在开发环境中,浏览器重新加载大约需要 15-20 秒,但在控制台中它只显示 ~400 毫秒。这正在成为一个巨大的痛苦。而且我还没有找到解决办法。
      • 我也有同样的经历。昨晚很快,今天早上起来,现在变慢了。运行 dscacheutil -flushcache 也无济于事。
      【解决方案5】:

      我来到这篇文章试图理解为什么我在开发模式下看到请求之间的时间如此之长。

      我正在开发一个中等大小的应用程序 - 4000 LOC,113 个类 - 并在一台速度较慢的机器上运行它。请求之间超过 9/10 的时间发生在加载模型代码时。

      可以预见,config.cache_classes = true 大大加快了速度。

      【讨论】:

      • 是的,这大大加快了速度,但缺点是每当我更改特定文件时,由于缓存标志为真,因此不会获取此更改。所以,我每次都必须重新启动应用程序,服务器重新启动大约需要 20-30 秒。
      【解决方案6】:

      使开发更快的best way 正在安装名为active_reloadgem

      要安装这个gem,可以输入命令,

      gem install active_reload

      并且,在您的 rails 项目 gemfile 中,添加

      gem 'active_reload'

      然后,重启你的服务器,你会发现开发模式比以前快了很多。

      【讨论】:

        【解决方案7】:

        我假设您的请求需要几秒钟? (否则你可能不会注意到)。对我来说一直很快。特别是自从我开始使用 sinatra 而不是 rails :D

        哦,我忘了提 - 我以前在本地运行 rails,但我目前使用带有 VMWare 的虚拟 centos 服务器。两者都很快

        【讨论】:

        • 哈哈哈。好吧,我不应该解释,但 Sinatra 不是一个选择。我已经深入到我目前的项目中。安装一个允许您(喘气)运行更新的代码而无需重新启动开发服务器的插件是否有趣。哦,快:)
        • 我认为 VMWare 制作了一个 Windows 版本,但基本上,您购买/下载一个可以让您虚拟运行多个操作系统的程序。例如,在我的 Mac 上,我在虚拟机中运行 Windows 和 Centos (linux)。该软件允许您共享文件夹,因此您机器上的文件夹在虚拟操作系统中是镜像的。您可以像设置服务器一样设置它,并且它具有本地 IP 地址。您可以输入该 IP 地址来访问它,或者编辑您的主机文件以创建一个假域。例如,blog.local 转到我的虚拟服务器。
        • 那么当 Rails 在这台 vmware 服务器上时,您是否将它设置为生产模式或开发模式?
        • 随便你:)我会把它放在开发模式。
        【解决方案8】:

        我在 development.rb 中设置了 config.cache_classes = true。它仍然很慢,我必须在更改代码后重新启动服务器。

        您不应该在开发中使用该缓存(尤其是在使用它时仍然很慢的情况下)。 不得不一直重启服务器会让你的速度更慢。

        你确定 Ruby 本身很慢吗? 不是例如您运行的一些数据库访问代码? 一个简单的“Hello World”演示同样慢吗?

        我们说话的速度有多慢? 页面加载时间超过 10 秒?

        【讨论】:

        • 加载时间约为 8 秒。数据库访问并不慢,因为我有一个连接到同一个数据库的测试生产服务器(不是本地的)。对于您的第一点,它本质上是两个弊端之间的选择。
        【解决方案9】:

        在 development.rb 中设置 config.cache_classes = true 将始终在开发模式下加速较大的应用程序。我喜欢在我的开发环境中有这条线:

        config.cache_classes = ENV["CACHE_CLASSES"] ? ENV["CACHE_CLASSES"] == "true" : false
        

        然后你可以启动你的服务器:

        CACHE_CLASSES=true script/server
        

        当您想要更快的响应时间并且不介意类不会在每次请求时重新加载时。

        【讨论】:

          【解决方案10】:

          如果您使用的是 Rails 3.0 或 3.1 版本,您可以使用 active reload 来显着加快页面加载时间。它被整合到 Rails 3.2 中。

          【讨论】:

            【解决方案11】:
            Andrews-MacBook-Pro:Sites askegg$ rails test
            Andrews-MacBook-Pro:Sites askegg$ cd test
            Andrews-MacBook-Pro:test askegg$ ./script/generate model test
                  exists  app/models/
                  exists  test/unit/
                  exists  test/fixtures/
                  create  app/models/test.rb
                  create  test/unit/test_test.rb
                  create  test/fixtures/tests.yml
                  create  db/migrate
                  create  db/migrate/20090812005217_create_tests.rb
            Andrews-MacBook-Pro:test askegg$ ./script/performance/benchmarker 1000000 Test.new
                        user     system      total        real
            #1     25.140000   0.200000  25.340000 ( 25.549605)
            

            嗯。在加载了 12 个其他程序的 macbook pro 上以开发模式实例化 100 万个对象需要 25 秒。我觉得还可以。

            【讨论】:

            • 所以你的意思是我应该欣赏 Rails 应用程序在幕后的巨大复杂性,为我提供流畅的开发体验,并将缓慢的开发服务器时间算作非常好的权衡的一小部分?
            • 一点也不。我正在证明 Rails(至少在我的机器上)一点也不慢。我刚刚在我最近完成的一个项目上运行了另一个测试(在开发模式下)——它在 0.271 秒内加载了 1,000 个对象。这与您的 8 秒加载时间相差甚远。您的配置有问题,所以它确实不是 Rails 特定的问题。
            • 哦 - 另外尝试分析您正在进行的方法调用,以查看应用程序可能在哪里变慢。例如“./script/performance/profiler Page.first 1000”
            • 是的。 “Page.first”只是我的一个项目中的一个例子。我在一个非常纤薄的 CMS 中有一个 Page 模型。只需将其替换为您自己的代码即可。
            猜你喜欢
            • 1970-01-01
            • 2014-09-12
            • 2011-01-29
            • 1970-01-01
            • 1970-01-01
            • 2013-04-19
            • 2012-10-11
            • 1970-01-01
            • 2013-01-18
            相关资源
            最近更新 更多