Rails ActionController :: RoutingError用于开发机器中不存在的已上载资产

时间:2018-05-21 20:35:22

标签: ruby-on-rails

我很常见的是在我的开发机器中克隆生产数据库,以使开发ENV尽可能接近实际情况,并使用真实数据进行开发/测试。

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

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

  

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  

通过Rails路由渲染缺失图像的404s加载时   转储开发,记录可能参考不是的图像   可在您的机器上使用。

     

对这些图片的请求可能会在您的应用程序中出现,例如:如果一个   定义了catch-all路由,导致控制器执行一些繁重的操作   吊装。在包含大量缺失图像的页面上,这会减慢速度   发展回应时间。

     

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

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

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

所以我只是在我routes.rb文件的开头粘贴了该片段,然后解决了问题!