rails 5 carrierwave没有路由匹配图像

我需要一些帮助。 我使用rails 5和carrierwave上传图像。 我遇到的问题是图像被保存但不会显示,我得到一个无路由匹配GET …..我将图像存储在Rails.root的uploads文件夹中,因为我不希望它们保存在公共场所DIR。

image_uploader.rb

def store_dir "uploads/#{model.user_id}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" end 

carrier_wave.rb

 require 'carrierwave/orm/activerecord' require 'carrierwave' CarrierWave.configure do |config| config.root = Rails.root end 

这是我在日志中收到的错误:

 Started GET "/uploads/2/uitem/image/26/A_penrose-small.jpg" for ::1 at 2016-10-29 16:06:27 +0200 ActionController::RoutingError (No route matches [GET] "/uploads/2/uitem/image/26/A_penrose-small.jpg"): 

非常感谢任何帮助,我一直在搜索,无法找到解决方案。 谢谢

找不到图像的原因是Web服务器的root是Rails应用程序的公共目录,因此它正在“public / uploads / 2 / …”下查找图像。

由于Web服务器无法找到该文件,因此它将请求传递给Rails堆栈,并且没有定义匹配的路由,因此会引发错误。

如果您将图像上载根更改为公共目录,它应该按预期工作。

UPDATE

如果您不想将图像放在公共目录下,则可以创建路径和控制器操作来为图像提供服务。 您可以在控制器操作中使用send_file方法。 看看这个问题:

Rails 3,显示来自RAILS_ROOT上方的本地文件系统的jpg图像