我需要一些帮助。我正在使用 Rails 5 和 Carrierwave 上传图像。我遇到的问题是图像已保存但不会显示,我得到一个没有路由匹配的 GET...我将图像存储在 Rails.root 的上传文件夹中,因为我不希望它们保存在公共环境中目录。
图片上传器.rb
def store_dir
"uploads/#{model.user_id}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
载波.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/uploads/2/...”下查找图像
由于 Web 服务器无法找到该文件,因此它会将请求传递到 Rails 堆栈,并且没有定义匹配的路由,因此会抛出错误。
如果您将图像上传根目录更改为公共目录,它应该按您的预期工作。
UPDATE
如果您不想将图像放在公共目录下,您可以创建一个路由和控制器操作来提供图像。您可以在控制器操作中使用 send_file 方法。看看这个问题:
Rails 3,显示RAILS_ROOT上方本地文件系统中的jpg图像 https://stackoverflow.com/questions/11959203/rails-3-displaying-jpg-images-from-the-local-file-system-above-rails-root
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)