【问题标题】:Images not associated properly (carrier wave, fog, heroku)图像关联不正确(载波、雾、heroku)
【发布时间】:2011-09-17 01:26:22
【问题描述】:

尝试将基于载波的图像上传添加到我的用户模型。这在本地开发中有效。在 heroku 上,图像上传到我的 s3 存储桶,但从未显示。在控制台中,似乎没有上传任何图像。

如果图像正在进入 s3,为什么它没有正确关联?

代码如下:

# config/initializers/carrierwave.rb
CarrierWave.configure do |config|

  if Rails.env.production?
    config.fog_credentials = {
      provider:              'AWS',               # required
      aws_access_key_id:     ENV['S3_KEY'],       # required
      aws_secret_access_key: ENV['S3_SECRET']     # required
    }

    config.fog_directory  = ENV['S3_BUCKET']      # required
    config.fog_public     = false                 # optional, defaults to true
    config.fog_attributes = {
      'Cache-Control'=>'max-age=315576000'
    }

    config.storage = :fog
  else
    config.storage = :file
  end

end

# app/uploaders/profile_picture_uploader.rb
class ProfilePictureUploader < CarrierWave::Uploader::Base

  def store_dir
    "uploads/#{ model_name }/#{ mounted_as }/#{ model.id }"
  end

  def cache_dir
     Rails.root.join *%w[ tmp uploads model_name ]
  end

  def extension_white_list
    %w[ jpg jpeg gif png ]
  end

private

  def model_name
    @model_name ||= model.class.to_s.underscore
  end

end

# app/models/user.rb
class User < ActiveRecord::Base

  mount_uploader :profile_picture, ProfilePictureUploader

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  attr_accessible :email, :password, :password_confirmation, :profile_picture

end

# app/views/users/edit.html.haml
%h1 Edit user

= form_for @user do |f|

  %h2 Profile Picture
  - if f.object.profile_picture.present?
    = image_tag f.object.profile_picture
    %p= f.object.profile_picture.file.basename

    = f.check_box :remove_profile_picture
    = f.label :remove_profile_picture, 'Delete your Profile Picture'

    = f.label :profile_picture, 'Replace your Profile Picture'
  - else
    = f.label :profile_picture, 'Add your Profile Picture'
  = f.file_field :profile_picture

  %p
    = f.submit 'Save'
    or
    = link_to 'cancel', @user

平台:

  • 导轨 3.1.0
  • 载波 0.5.7
  • heroku 雪松栈

【问题讨论】:

    标签: ruby-on-rails-3 heroku carrierwave fog


    【解决方案1】:

    仍然不完全确定为什么这有效,但我在我的模型中添加了一个方法

    def profile_picture_file_name
      read_attribute :profile_picture_file
    end
    

    并在我的视图中使用该方法而不是

    f.object.profile_picture.file.basename
    

    现在一切都很幸福。

    感谢Displaying a Carrierwave filename in the view

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 2012-12-14
      • 1970-01-01
      • 2014-04-29
      • 2013-11-02
      相关资源
      最近更新 更多