【发布时间】:2017-01-07 21:50:56
【问题描述】:
我正在使用 Carrierwave 版本 1.0.0rc 将文件上传和处理到 AWS S3 存储桶。这是我的环境:
导轨 4.2.0 红宝石 2.1.1 MiniMagick 4.5.1 ImageMagick 6.9.7-0
我的上传者确定要上传的原始图片是横向还是纵向,并将相应地应用处理规则。文件上传到 AWS S3 存储桶,但随后出现以下错误:
SponsorsController#create 中的 Errno::ENOENT 没有这样的文件或目录@rb_sysopen - uploads/sponsor/logo/30/Breen_Electrical_Logo.jpg
并且提取的源代码会突出显示此代码:
image = MiniMagick::Image.open(picture.path)
这是我的上传代码:
class LogoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
version :landscape, if: :is_landscape?
version :portrait, if: :is_portrait?
version :landscape do
process resize_to_fit: [200, 50]
end
version :landscape_sm, from_version: :landscape do
process resize_to_fit: [100, 25]
end
version :portrait do
process resize_to_fit: [50, 200]
end
version :portrait_sm, from_version: :portrait do
process resize_to_fit: [25, 100]
end
private
def is_landscape? picture
image = MiniMagick::Image.open(picture.path)
image[:width] > image[:height]
end
def is_portrait? picture
image = MiniMagick::Image.open(picture.path)
image[:width] < image[:height]
end
end
私有方法似乎打开文件来比较它的宽度和高度值。当我将文件存储在本地公用文件夹中时,这工作得很好。我猜“picture.path”url 没有指向 S3 存储桶路径来打开文件。
这是我的 /config/initializers/carrierwave.rb 文件
require 'fog/aws'
CarrierWave.configure do |config|
config.fog_provider = 'fog/aws'
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: <access_key_id>,
aws_secret_access_key: <secret_access_key>,
region: 'us-west-2',
:path_style => true
}
config.fog_directory = <bucketname>
end
我似乎找不到其他人有同样的问题。有任何想法吗?提前致谢。
【问题讨论】:
标签: amazon-s3 imagemagick carrierwave fog minimagick