【问题标题】:Rails ActionController::RoutingError for uploaded assets not present in development machineRails ActionController::RoutingError 用于开发机器中不存在的上传资产
【发布时间】:2018-05-21 20:35:21
【问题描述】:

我通常会在我的开发机器中克隆生产数据库,以使开发 ENV 尽可能接近真实事物并使用真实数据进行开发/测试。

问题在于,通过这样做,我的许多视图现在都引用了用户上传的资产(图像)(CarrierWave),但由于我们谈论的是数百个演出的图像,因此克隆这些资产是不切实际的也是。

然而,这会导致糟糕的开发体验:包含许多此类图像的每个视图都会导致 Rails 服务器处理数十个请求,从而引发如下所示的 RoutingErrors:

ActionController::RoutingError(没有路由匹配 [GET] "/uploads/picture/mv_files/image/000/000/051/966/51966/thumb_101__2_.jpg")

在一个有 30 多个这样的页面中,Rails 服务器需要超过 15 秒才能引发所有异常并处理下一个请求。

任何想法如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    发布此消息几分钟后,我在this excellent Makandra Cards 中找到了我正在寻找的解决方案:

    通过 Rails 路由为丢失的图像渲染 404 当你加载一个 转储用于开发,记录可能会引用不是 在您的机器上可用。

    对这些图像的请求最终可能会出现在您的应用程序中,例如如果一个 定义了包罗万象的路线,导致控制器做一些繁重的工作 起重。在有很多丢失图像的页面上,这会减慢 开发响应时间。

    您可以通过像这样定义 Rails 路由来解决这个问题:

    if Rails.env.development?
      scope format: true, constraints: { format: /jpg|png|gif/ } do
        get '/*anything', to: proc { [404, {}, ['']] }
      end
    end
    

    图片(通常)直接来自公共或资产,不会影响您的 控制器/路由,只要文件存在。如果文件丢失, 请求将由上述路线立即处理 以空的 HTTP 404 响应进行响应。

    所以我只是将那个 sn-p 粘贴到我的 routes.rb 文件的开头,瞧,问题解决了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多