2013-10-24 1 views
0

Я получил эту ошибку Каждый раз, когда разница между временем запроса и текущим временем слишком велика. Я обнаружил, что нам нужно применить опцию sync_clock, но не в состоянии конфигурационного place.see моя конфигурация, пожалуйста, помогите нам настроить синхронизацию перевести часыкак применить опцию sync_clock при загрузке 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 и сохраняет смещение (а затем изменяет отметки времени, которые он отправляет по смещению). Таким образом, это должно гарантировать, что вы больше не увидите эту ошибку (хотя это не должно часто возникать, т. Е. Если вы перейдете на герольку, новые диноды, вероятно, не будут иметь косы). Надеюсь, что это очистит, но с удовольствием поможет вам в случае необходимости.

+0

Спасибо за ваш повтор, помогли нам в функции, потому что мы переносим наше приложение на carrierwave-aws. – jayesh

+0

Спасибо, я потратил более 2 дней на исправление запросов! – AlxGol

2

Ответ S3 означает заголовок «Дата» в вашем запросе был неверен более чем на 15 минут. Вы должны проверить:

времени
  1. Вашей системы правильно установлен
  2. Вашего часовой пояс правильно установлен

См также:

+0

Как проверить, что его часовой пояс и какой часовой пояс необходимо установить и как установить часовой пояс в героику? – jayesh

+0

Часовой пояс - это настройка приложения, в config/application.rb. См. [Здесь] (http://guides.rubyonrails.org/configuring.html#rails-general-configuration). Если ваше динамическое время искажено, у вас нет другого выбора, кроме как повторное развертывание, и надейтесь, что это не повторится, или следуйте советам geemus re sync_clock. Для других, пытающихся догнать, см. Https://groups.google.com/forum/#!topic/ruby-fog/kaehIbyr3kk – Taavo

+0

Да, как отмечает @Taavo, я ожидаю, что это будет необычно, чтобы получить перекошенную динамику, поэтому повторное развертывание, скорее всего, также устранит его. sync_clock обеспечивает это, но, вероятно, не часто в большинстве случаев. – geemus

Смежные вопросы