ruby-on-rails - rails 5 carrierwave 没有路由匹配图像

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

我需要一些帮助。我正在使用 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/

相关文章:

ruby-on-rails - Rails 3 - 表单验证 - 将逻辑移动到回调或观察者?

ruby-on-rails - 在 Ruby on Rails 中使用索引键获取数组值

javascript - Hyperstack 中的高阶组件

css - 使用 Sass 在元素中安装 Ruby

image - Grails渲染插件不会渲染图像

ruby-on-rails - 在 RSpec 中使用 expect 和 should

用于读取列中最后一个填充单元格的 Ruby 脚本

Java AffinetransformOp filter() 搞砸了我的形象

java - 我无法以 200 的间隔进行图像更新

ruby-on-rails - Rails 不正确地缓存页面 - 如何停止?