Ruby on Rails / Paperclip / AWS::S3::NoSuchBucket错误

3
我安装了Paperclip插件并成功地在本地使用它。当我将其配置为与Amazon S3配合使用时,我一直收到NoSuchBucket(指定的存储桶不存在)错误。Paperclip文档说明如果存储桶不存在,它将被创建,但在我的情况下显然出了问题。
我首先安装了aws-s3 gem(v0.6.2),然后还安装了right_aws gem(v1.9.0)。
两者都有相应的…
config.gem "aws-s3", :lib => "aws/s3"
config.gem 'right_aws', :version => '1.9.0'

environment.rb文件中的行

使用paperclip的image.rb文件代码如下:

class Image < ActiveRecord::Base

    belongs_to  :work

    has_attached_file :photo, :styles => {:big => "612x1224>", :small => "180X360>", :thumb => "36x36#"},
                      :storage => 's3',
                      :s3_credentials => YAML.load_file("#{RAILS_ROOT}/config/s3.yml")[RAILS_ENV],   
                      :path => ":attachment/:id/:style/:basename.:extension",
                      :bucket => 'my-unique-image-bucket'

    attr_protected :photo_file_name, :photo_content_type, :photo_size

    validates_attachment_presence :photo
    validates_attachment_size :photo, :less_than => 3.megabytes
    validates_attachment_content_type :photo, :content_type => ['image/jpeg', 'image/png', 'image/gif']

end
5个回答

3

我不完全确定这是不是你要找的,但是你加载s3_credentials的方法与我在我的生产站点中使用的不同。

我的配置行是:

:s3_credentials => "#{RAILS_ROOT}/config/s3.yml"

替代

:s3_credentials => YAML.load_file("#{RAILS_ROOT}/config/s3.yml")[RAILS_ENV]

实际的插件会加载YAML文件,你不应该这样做。 - Garrett
尝试了您加载YAML文件的方法,但仍然无法正常工作。凭据文件可能没有问题,因为它可以成功加载,并在无法加载或任何键错误时提供不同的错误。 - fahrio
你手动创建了存储桶吗?(使用S3Fox,Transmit或S3Hub),然后尝试上传了吗? - Mike Buckbee

1

0

这不是你的问题,但是 AWS 不允许在存储桶名称中使用大写字母,而 paperclip 没有检查这一点,在 create_bucket 失败。


0

我已经在Firefox中安装了s3fox插件,并使用该插件创建了存储桶。现在Paperclip与S3很好地配合工作,因为所识别的存储桶已经被创建。

但是,我仍然对上述代码不能创建新存储桶的问题感到好奇。


我不知道,使用S3的某些方面对我来说仍然似乎非常不稳定,往往很难确定是哪个系统出了问题。例如,“目录”结构(其中包含斜杠的键)通常在客户端应用程序之间似乎无法工作,我甚至在S3中遇到了一些奇怪的权限问题。话虽如此,它仍然是一个很好的服务,我依赖它,但有必要彻底测试您的工具链。 - Mike Buckbee

0
如果有人通过谷歌搜索到这里:当我错误地交换了传递给 AWS::S3::S3Object.store 的第二个和第三个参数的顺序时,我遇到了同样的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接