使用paperclip gem Amazon S3上传图片时,Aws缺少区域错误

时间:2016-01-10 21:12:03

标签: ruby-on-rails amazon-web-services heroku amazon-s3 paperclip

我对铁杆比较陌生。我让paperclip gem在本地开发中运行良好,用户在注册时上传头像没有任何问题。我通过Heroku部署到生产中,并且在注册时创建上传图像的用户时也没有错误,但所有上传的图像在生产中都显示为缺少缩略图。我读了一下,显然是用回形针制作的,我应该使用一种名为Amazon S3的东西(如果有更好的方法,请纠正我),所以我试图这样做。

以下是我尝试创建上传图片的用户时遇到的错误:

Aws::Errors::MissingRegionError in Devise::RegistrationsController#create
missing region; use :region option or export region name to ENV['AWS_REGION']

这是我在生产和开发环境中所拥有的东西

config.paperclip_defaults = {
  storage: :s3,
  s3_host_name: 's3-ap-southeast-1.amazonaws.com',
  s3_credentials: {
    bucket: ENV['AWS_S3_BUCKET'],
    s3_region: ENV['S3_REGION'],
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
  }
}

以下是我在paperclip.rb初始化程序中的内容

Paperclip::Attachment.default_options[:url] = ':s3_domain_url'
Paperclip::Attachment.default_options[:path] = '/:class/:attachment/:id_partition/:style/:filename'


    Paperclip::Attachment.default_options[:s3_host_name] = 's3-ap-southeast-1.amazonaws.com'

注意(我在中东)

以下是我在用户模型中的内容

#paperclip gem storing avatar images


 has_attached_file :avatar, 
          :bucket => 'bucket_name',
          :styles => {
          :thumb    => ['100x100#',  :jpg, :quality => 70],
         :preview  => ['480x480#',  :jpg, :quality => 70],
         :large    => ['600>',      :jpg, :quality => 70],
         :retina   => ['1200>',     :jpg, :quality => 30]
},
        :convert_options => {
         :thumb    => '-set colorspace sRGB -strip',
         :preview  => '-set colorspace sRGB -strip',
         :large    => '-set colorspace sRGB -strip',
         :retina   => '-set colorspace sRGB -strip -sharpen 0x0.5'
}

我已经查找了有关S3 Paperclip Gem和缺少Region错误的问题,但是从未见过像这样说错误是在Devise控制器中。我认为这是因为:头像与用户的关联是由设计控制的,而我没有单独的用户控制器。

我觉得应该有一种更简单的方法来解决使用paperclip gem在生产中丢失图像的问题,而不是使用这种亚马逊S3的东西。特别是如果没有亚马逊S3,一切都在当地工作正常和花花公子。还有其他建议吗?想法?

1 个答案:

答案 0 :(得分:0)

您不一定要使用亚马逊服务来存储您的图像,但如果您在Heroku上托管,则无法在本地存储。这是因为heroku使用临时文件系统,因此您必须预期本地存储的任何内容都可能随时消失。当您需要扩展应用程序时,这会使事情变得更加容易,因为如果您启动新的dynos,您不依赖于任何本地存储(这也使Heroku的生活更轻松,因为他们不需要打扰共享存储应用程序的dynos应该挂载。

现在,回到S3。首先,你有其他选择,如果你用回形针使用'雾'宝石,你可以以相对简单的方式访问number of storage providers

尽管如此,S3是最常见的,通过定义AWS_REGION变量,您的问题应该很容易解决。在Heroku上,您可以通过运行以下命令来执行此操作:

heroku config:set AWS_REGION=us-west-2

或者您正在使用的任何地区。

另外,最后我检查过paperclip与AWS SDK 2不兼容,所以如果您遇到奇怪的问题,可以尝试在Gemfile中使用它来切换回SDK 1:

gem 'aws-sdk', '< 2.0'