【问题标题】:Ruby on Rails image_tag not displaying the imageRuby on Rails image_tag 不显示图像
【发布时间】:2014-09-02 21:11:07
【问题描述】:

在 gemfile 中,我安装了carrierwave 以允许用户上传个人资料图片。我有点遵循这个 railscast 中的说明 - http://railscasts.com/episodes/253-carrierwave-file-uploads

gem 'carrierwave'

但是图像未使用 image_tag 显示。我可以通过在没有 image_tag 的情况下对其进行测试来查看图像目录。我还在图像目录中导航以确保存储图像。在director里可以看到“/uploads/user/image/110/”

在视图中,它显示图片网址 "/uploads/user/image/110/thumb_IMG_0017.JPG"

<%= @user.image_url(:thumb).to_s %>

添加图片标签不显示任何内容

<%= image_tag @user.image_url(:thumb).to_s %>

图像上传器

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or MiniMagick support:
  #include CarrierWave::RMagick
  include CarrierWave::MiniMagick

  # Choose what kind of storage to use for this uploader:
  storage :file

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_limit => [200, 200]
  end


end

控制器

def show
    @user = User.find(params[:id])
    ...
end

private

    def user_params
      params.require(:user).permit(:name, :email, :password, :password_confirmation, :image)
    end

型号

class User < ActiveRecord::Base
    ...

    mount_uploader :image, ImageUploader

    ...
end

直接查询数据库,例如用户 110 显示以下内容

User.find(110).image_url(:thumb)
User Load (2.1ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", 110]]
 => "/uploads/user/image/110/thumb_IMG_0017.JPG" 

【问题讨论】:

标签: ruby-on-rails file-upload carrierwave


【解决方案1】:

好的,我检查了服务器日志

Checked the server log looks like a routing issue - Started GET "/uploads/user/image/111/thumb_IMG_1355.JPG" for 127.0.0.1 at 2014-07-12 11:00:29 +0100

ActionController::RoutingError (No route matches [GET] "/uploads/user/image/111/thumb_IMG_1355.JPG"):

通过进入 config/environments/production.rb 和 development.rb 并将以下设置为 true,看起来问题将得到解决!

config.serve_static_assets = true

【讨论】:

  • 您是否处于生产模式?那会影响事情。你是在heroku还是什么的?
  • 生产是heroku。现在我在我的本地开发机器上。
  • 请注意... 弃用警告:配置选项 config.serve_static_assets 已重命名为 config.serve_static_files 以阐明其作用(它仅支持为 public 文件夹中的所有内容提供服务,并且是与资产管道无关)。 serve_static_assets 别名将在 Rails 5.0 中删除。请相应地迁移您的配置文件。
【解决方案2】:

设置carrierwave后,您需要重新启动服务器。这将解决所有问题。

【讨论】:

  • 我重新启动它,它并没有解决问题。我需要路由中的公用文件夹吗?
猜你喜欢
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2012-11-24
  • 2013-09-09
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多