我需要一些帮助。我正在使用 rails 5 和 carrierwave 上传图片。我遇到的问题是图像已保存但不会显示,我得到一个没有匹配 GET 的路由......我将图像存储在 Rails.root 的上传文件夹中,因为我不希望它们公开保存目录。
图片 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/...”下寻找图像
由于 Web 服务器找不到它正在将请求传递给 Rails 堆栈的文件,并且没有定义匹配的路由,因此它会抛出错误。
如果您将图片上传根目录更改为公共(public)目录,它应该可以正常工作。
更新
如果您不想将图像放在公共(public)目录下,您可以创建路由和 Controller 操作来提供图像。您可以在 Controller 操作中使用 send_file 方法。看看这个问题:
Rails 3, displaying jpg images from the local file system above RAILS_ROOT
关于ruby-on-rails - rails 5 carrierwave 没有路由匹配图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40319938/