【问题标题】:Am I doing something wrong with the asset pipeline?我在资产管道上做错了吗?
【发布时间】:2011-06-22 09:52:36
【问题描述】:

自从“升级”到 Rails 3.1 后,我的应用在开发模式下真的很慢

(> 每个请求 30 个)

我有很多图像,而且似乎大部分时间延迟是资产管道处理每个图像的每个 GET 请求。

在暂存或生产模式下不会出现此问题,因为资产已缓存等。

有什么我没有被告知的,还是我们现在应该这样工作?

【问题讨论】:

  • 同时:cp -R app/assets/images public/assets 真的很有帮助!

标签: ruby-on-rails ruby-on-rails-3.1 asset-pipeline


【解决方案1】:

如果您的 gem 或应用程序的某些部分在每个请求开始时加载代码,或者仅引用应用程序的某些部分,从而导致加载大部分应用程序,则请求可能会很慢。对于其中的大多数,自动加载器是请求延迟的主要原因。

rails 自动重新加载器删除在每个请求开始时所有可自动加载的类/模块/等,并且可能在每个请求开始时导致显着延迟,因为 Rails 重新加载它需要的所有源文件.

您可能想尝试使用https://github.com/wavii/rails-dev-tweaks,它可以让您精细控制哪些请求会导致自动重新加载器启动。这确实不能解决根本原因(在可能不需要执行的每个请求的开始) - 但它肯定会缓解大多数此类问题。

【讨论】:

    【解决方案2】:

    同时:

    cp -R 应用程序/资产/图像公共/资产

    真的有帮助

    记得将public/assets/*添加到.gitignore

    【讨论】:

      【解决方案3】:

      如果您的应用程序运行缓慢,那是因为您的应用程序或您使用的其中一种宝石。我遇到了类似的问题,看起来 Mongoid 就是这种情况,您可以在这里阅读更多内容:

      http://martinciu.com/2011/06/rails-3-1-and-slow-asset-pipeline.html

      【讨论】:

        【解决方案4】:

        您可以使用 rake 任务:

        rake assets:预编译 RAILS_ENV=development RAILS_ASSETS_NONDIGEST=true

        如上所述,不要忘记在 .gitignore 中包含 public/assets/*

        【讨论】:

        • 在开发模式下没有帮助
        • 在开发模式下预编译?你疯了吗?