rails 5 carrierwave 没有路径匹配图像

rails 5 carrierwave no route matches for image

我需要一些帮助。我正在使用 rails 5 和载波上传图像。我遇到的问题是图像已保存但不会显示,我没有路由匹配 GET..... 我将图像存储在 Rails.root 的上传文件夹中,因为我不想将它们保存在public 目录

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 服务器的根目录是 Rails 应用程序的 public 目录,因此它正在寻找 "public/uploads/2/..."[=11 下的图像=]

由于网络服务器无法找到它正在将请求传递给 Rails 堆栈的文件,并且没有定义匹配的路由,因此它会抛出错误。

如果您将图片上传根目录更改为 public 目录,它应该可以正常工作。

更新

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

Rails 3, displaying jpg images from the local file system above RAILS_ROOT