2013-10-24 81 views
0

我得到這個錯誤每次申請sync_clock選擇,由於請求時間和當前時間之間的差異過大。我發現,我們需要申請sync_clock選項,但不能配置place.see我的配置請幫助我們配置同步時鐘如何在S3上傳與CarrierWave在Ruby on Rails的

錯誤:

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 

uploder

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 

回答

6

這是不幸的是,這種情況發生的事情。幸好有一個修復。

在初始化,你應該能夠做這樣的事情:

Fog::Storage.new(fog_credentials).sync_clock

您應該能夠使用您傳遞在你的初始化這裏fog_credentials來配置相同的值。 sync_clock向S3發出一個簡單的請求並存儲偏移量(然後修改它通過偏移量發送的時間戳)。所以應該確保你不會再看到這個錯誤(儘管它不應該經常出現,也就是說,如果你重新部署到heroku,那麼新的dynos可能不會有偏差)。希望能夠清除它,但如果需要,還樂意提供更多幫助。

+0

感謝您的回放,它幫助我們確保功能,因爲我們將我們的應用程序遷移到carrierwave-aws – jayesh

+0

謝謝,我花了2天以上修復請求! – AlxGol

2

S3的反應意味着你請求中的「日期」標題錯誤超過15分鐘。您應該檢查:

  1. 你的系統時間設置是否正確
  2. 你的時區設置正確

參見:

+0

如何檢查其時區的問題,以及哪個時區需要設置以及如何在Heroku的設置時區? – jayesh

+0

時區是應用程序設置,位於config/application.rb中。請參閱[這裏](http://guides.rubyonrails.org/configuring.html#rails-general-configuration)。如果你的dyno時間有偏差,你別無選擇,只能重新部署,並希望它不會再發生,或按照geemus的建議重新sync_clock。對於其他人努力追趕,見https://groups.google.com/forum/#!topic/ruby-fog/kaehIbyr3kk – Taavo

+0

是啊,作爲@Taavo筆記,我希望它是異常的獲得歪斜測功機,所以重新部署可能也會修復它。 sync_clock可以確保它,但大多數情況下可能不是。 – geemus