【问题标题】:Rails 4.2 + Paperclip + Amazon s3: getaddrinfo: nodename nor servname provided, or not knownRails 4.2 + Paperclip + Amazon s3:getaddrinfo:提供节点名或服务名,或未知
【发布时间】:2016-05-17 20:30:06
【问题描述】:

即使此错误出现在其他 SO 问题中,我也无法解决问题,因此我正在寻求帮助。

我正在使用rails 4.2.5paperclip ~>4.1aws-sdk <2.0 将附件存储到Amazon S3

我已经创建了一个 bucket 和一个拥有 AmazonS3FullAccess 权限的 IAM User,并且我正尝试像这样从 Rails 连接。

config/environments/development.rb

config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => 'bucket-name',
    :access_key_id => '****',
    :secret_access_key => '****',
  }
}

app/models/user.rb

has_attached_file :avatar, 
  :styles => { :medium => "300x300#", :thumb => "100x100#" }, 
  :default_url => "/img/avatar-missing.jpg",
  :storage => :s3,
  :s3_host_name => "s3-us-east-1.amazonaws.com"

我使用此策略配置了存储桶权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

但是当我尝试向它上传一些东西时,它会抛出这个 ******* 错误:

getaddrinfo: nodename nor servname provided, or not known

在控制台中,我可以看到回形针可以调整图片大小,但无法将其上传到 Amazon S3

[paperclip] saving /users/avatars/000/000/001/original/10382845_246916218831306_3480489092212800336_n.jpg
[AWS S3 200 2.304022 3 retries] put_object(:acl=>:public_read,:bucket_name=>"bucket-name",:content_length=>41431,:content_type=>"image/jpeg",:data=>Paperclip::UploadedFileAdapter: 10382845_246916218831306_3480489092212800336_n.jpg,:key=>"users/avatars/000/000/001/original/10382845_246916218831306_3480489092212800336_n.jpg") SocketError getaddrinfo: nodename nor servname provided, or not known

我们将不胜感激任何帮助

【问题讨论】:

    标签: ruby-on-rails amazon-s3 paperclip


    【解决方案1】:

    你能尝试这样配置模型吗:

      has_attached_file :my_file,
        :storage => :s3,
        :default_url => "/default.default",
        :s3_region => ENV['AWS_REGION'],
        :s3_credentials => {
          :bucket => ENV['AWS_BUCKET_NAME'],
          :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
          :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
          :region => ENV['AWS_REGION']
        }
    

    有时问题是区域未定义且配置失败。

    【讨论】:

    • 谢谢伙计。这也可以移动到初始化程序中。关键(使用此 gems 版本)是在 paperclip_defaults 散列中声明 :s3_region,在 :s3_credentials 散列中声明 :region。非常感谢,我为此浪费了很多时间。
    猜你喜欢
    • 2011-10-17
    • 2011-05-07
    • 2012-11-02
    • 2017-04-18
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2016-11-11
    • 2015-07-31
    相关资源
    最近更新 更多