0

由于请求时间和当前时间之间的差异太大,我每次都会收到此错误。我发现我们需要应用 sync_clock 选项但无法配置地方。请参阅我的配置请帮助我们配置同步时钟

错误 :

  Expected(200) <=> Actual(403 Forbidden)
  request => {:headers=>{"Content-Length"=>54911, "Content-Type"=>"image/jpeg", "x-amz-acl"=>"public-read", "Cache-Control"=>"max-age=315576000", "Date"=>"Thu, 24 Oct 2013 01:14:14 +0000", "Authorization"=>"changed", "Host"=>"changed"}, :host=>"changed", :mock=>nil, :path=>"/uploads%2Fproject%2Fimage_1%2F697%2FHamburg-Speicher-im-Bau-090825.jpg", :port=>"443", :query=>nil, :scheme=>"https", :body=>#<File:/app/tmp/carrierwave/20131024-0114-2-7499/Hamburg-Speicher-im-Bau-090825.jpg>, :expects=>200, :idempotent=>true, :method=>"PUT"}
  response => #<Excon::Response:0x0000000b72f0a0 @body="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the request time and the current time is too large.</Message><MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds><RequestId>EA8E8FF76B54D7F3</RequestId><HostId>/RiS+pn3JcKzOoArMhFRYmSBRYwRAptugp8W32XAT4vupukmxMCtHRKIHy7wy9BL</HostId><RequestTime>Thu, 24 Oct 2013 01:14:14 +0000</RequestTime><ServerTime>2013-10-24T01:29:49Z</ServerTime></Error>", @headers={"x-amz-request-id"=>"EA8E8FF76B54D7F3", "x-amz-id-2"=>"/RiS+pn3JcKzOoArMhFRYmSBRYwRAptugp8W32XAT4vupukmxMCtHRKIHy7wy9BL", "Content-Type"=>"application/xml", "Transfer-Encoding"=>"chunked", "Date"=>"Thu, 24 Oct 2013 01:29:47 GMT", "Connection"=>"close", "Server"=>"AmazonS3"}, @status=403>
  vendor/bundle/ruby/1.9.1/gems/excon-0.6.6/lib/excon/connection.rb:190:in `request' 

初始化器

  CarrierWave.configure do |config|
  if Rails.env.production?
    config.fog_directory  = 'ese-prod'
    config.fog_host       = 'https://s3.amazonaws.com/ese-prod'
  else
    config.fog_directory  = 'ese-dev'
    config.fog_host       = 'https://s3.amazonaws.com/ese-dev'
  end
  if Rails.env.production? || Rails.env.development?

    config.fog_credentials = {
       :provider               => 'AWS',
       :aws_access_key_id      => 'AAAAAAAAAAA',
       :aws_secret_access_key  => 'BBBBBBBBBBBB',
       :region                 => 'us-east-1'
     }
    config.fog_public     = true
    config.fog_attributes = {'Cache-Control' => 'max-age=315576000'}

    config.root = Rails.root.join('tmp') # adding these...
    config.cache_dir = 'carrierwave' # ...two lines

  # elsif Rails.env.development?
  #  config.storage = :file
  else
    config.storage = :file
  end
end

上传者

class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::MiniMagick
  if Rails.env.production? || Rails.env.development?
    storage :fog
  else
    storage :file
  end

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_limit => [50, 50]
  end

  version :partner do
    process :resize_to_limit => [150, 150]
  end

  def extension_white_list
    %w(jpg jpeg gif png)
  end
end
4

2 回答 2

7

不幸的是,这是发生的事情。值得庆幸的是,有一个修复程序。

在初始化程序中,您应该能够执行以下操作:

Fog::Storage.new(fog_credentials).sync_clock

您应该能够在此处为雾凭证的初始化程序中使用传递给配置的相同值。sync_clock 向 S3 发出一个简单的请求并存储偏移量(然后通过偏移量修改它发送的时间戳)。所以这应该确保你不会再看到这个错误(尽管它不应该经常出现,即如果你重新部署到heroku,新的测功机可能不会仍然存在偏差)。希望可以解决问题,但如果需要,很乐意提供更多帮助。

于 2013-10-28T14:12:35.400 回答
2

S3 的响应意味着您请求中的“日期”标头不正确超过 15 分钟。你应该检查:

  1. 您的系统时间设置正确
  2. 您的时区设置正确

也可以看看:

于 2013-10-26T16:22:41.100 回答