代码之家  ›  专栏  ›  技术社区  ›  sandre89

Rails ActionController::开发计算机中不存在上载资产的路由错误

  •  0
  • sandre89  · 技术社区  · 8 年前

    对于我来说,在开发机器中克隆生产数据库以使开发环境尽可能接近实际情况,并使用实际数据开发/测试是非常常见的。

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

    然而,这会导致一个糟糕的开发体验:每一个拥有这些图像的视图都会导致数十个请求被Rails服务器处理,从而引发如下路由错误:

    actionController::routingError(没有与[get]匹配的路由)“/uploads/picture/mv_files/image/000/000/051/966/51966/thumb_101_uu 2_uuu.jpg”)

    在一个30+的页面中,需要15秒以上的时间,这样Rails服务器就可以引发所有的异常,并且可以处理下一个请求。

    有什么解决这个问题的办法吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   sandre89    8 年前

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

    当您加载一个 转储以供开发,记录可能引用的图像不是 在您的机器上可用。

    对这些图像的请求可能最终出现在应用程序上,例如,如果 捕获所有路由定义为导致控制器执行某些重量级操作 举起。在有很多丢失图像的页面上,这会减慢速度 开发响应时间。

    您可以通过定义这样的铁路路线来解决这个问题:

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

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

    所以我把这段话贴在了 routes.rb 文件和VOIL,问题解决了!