【问题标题】:rails 5 carrierwave no route matches for imagerails 5carrierwave 没有路线匹配的图像
【发布时间】:2017-03-12 05:21:32
【问题描述】:

我需要一些帮助。我正在使用 rails 5 和carrierwave 上传图片。我遇到的问题是图像已保存但不会显示,我得到一个没有路线匹配的 GET .....我将图像存储在 Rails.root 的上传文件夹中,因为我不希望它们保存在公共目录。

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"):

任何帮助将不胜感激,我一直在搜索,但找不到解决方案。 谢谢

【问题讨论】:

    标签: ruby-on-rails ruby image carrierwave ruby-on-rails-5


    【解决方案1】:

    找不到图片的原因是 web 服务器的根目录是 Rails 应用的公共目录,所以它正在“public/uploads/2/...”下寻找图片

    由于 web 服务器找不到文件,它正在将请求传递给 Rails 堆栈,并且没有定义匹配的路由,所以它会抛出错误。

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

    更新

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

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


    【讨论】:

    • 是的,这确实有效,但我不想将图像保存在公共目录中
    • 感谢您的更新,该链接帮助很大,但并非一切正常。
    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 2017-07-13
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多