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