Изображения, не связанные должным образом (несущая волна, туман, heroku)
Пытаюсь добавить загрузку изображений на основе несущей волны в мою пользовательскую модель. Это работает локально в развитии. На 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
- carrierwave 0.5.7
- Heroku cedar stack
1 ответ:
Все еще не совсем уверен Почему это работает, но я добавил метод к моей модели
def profile_picture_file_name read_attribute :profile_picture_file end
И использовать этот метод, на мой взгляд, вместо
f.object.profile_picture.file.basename
И все теперь счастливы.
Благодаря отображению имени файла Carrierwave в представлении .