图像关联不正确(载波,雾,heroku)

时间:2011-09-17 01:26:22

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

尝试将基于载波的图像上传添加到我的用户模型中。这在本地开发中起作用。在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

平台:

  • rails 3.1.0
  • carrierwave 0.5.7
  • heroku cedar stack

1 个答案:

答案 0 :(得分:0)

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

def profile_picture_file_name
  read_attribute :profile_picture_file
end

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

f.object.profile_picture.file.basename

现在一切都很开心。

感谢Displaying a Carrierwave filename in the view