2015-01-21 9 views
6

Korzystając z carrierwave dla naszych uploaderów, otrzymujemy kilka błędów Excon każdego tygodnia z naszej aplikacji produkcyjnej. Na przykład:Szyny: sporadyczne błędy Carrierwave/Excon

Excon::Errors::BadRequest: Expected(200) <=> Actual(400 Bad Request) excon.error.response :body => "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>IncompleteBody</Code><Message>The request body terminated unexpectedly</Message> 

Zaczęliśmy owijania proces przesyłania w bloku ponawiania i zawsze wydaje się działać prawidłowo po kolei próbować, ale zastanawiam się, czy istnieje lepsze rozwiązanie, gdyż staje się nieporęczny po chwila. Wydaje mi się, że te błędy powinny być traktowane na niższym poziomie. Czy istnieje lepszy sposób na rozwiązanie tych problemów?

Oto nasza konfiguracja produkcja:

config.storage = :fog 
config.root = Dir.tmpdir 
config.cache_dir = 'carrierwave' 
config.fog_credentials = { 
    provider: 'AWS', 
    aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], 
    aws_secret_access_key: ENV['AWS_ACCESS_KEY'], 
} 

config.fog_directory = ENV['AWS_S3_BUCKET'] 
config.fog_public = false 
config.fog_authenticated_url_expiration = 7.days.to_i 

config.enable_processing = true 

I używamy wersji GEM:

fog (1.27.0) 
carrierwave (0.10.0) 
excon (0.43.0) 
+0

Udało ci się to naprawić? – RuiMochila

+0

Po przełączeniu się na 'carrierwave-aws' nie widzieliśmy już tego problemu. – lobati

Odpowiedz

3

on zaczął ponownie po pisałam inicjator takiego, po pokonaniu kilku problemów, Myślę, że punkty końcowe AWS uległy zmianie:

CarrierWave.configure do |config| 
    config.fog_credentials = { 
     :provider    => 'AWS', 
     :aws_access_key_id  => ENV['S3_KEY'], 
     :aws_secret_access_key => ENV['S3_SECRET'], 
     :endpoint    => "https://s3.amazonaws.com", 
     :region     => ENV['S3_REGION'] 
    } 
    config.fog_directory = ENV['S3_BUCKET'] 
end 

Również myślałem, że mój region w jako "us-west-2", patrząc na moją konsolę administracyjną AWS, ale zaczęło działać dopiero po zmianie na "eu-west-1".

Później zdałem sobie sprawę, że nie jest dobrym pomysłem określenie tego punktu końcowego, w rzeczywistości lepiej jest zostawić go w tej sytuacji. Tak czy inaczej, zmiana na nosicielstwo-aws wskazana przez lobati rozwiązała problem.

+1

Czy widzisz spójne błędy, czy były przerywane? W przeważającej części nasz działał, po prostu dostałby błąd raz na dzień lub dwa. Skończyło się na przejściu na klejnot [przewoźnik-aws-gem] (https://github.com/sorentwo/carrierwave -aws) i nie widziałem dotąd żadnych błędów. – lobati

+0

Dziękuję, że nagradzam przewoźnik-aws, że to sprawdzę. Na niektórych obrazach pojawiały się powtarzające się błędy, podczas gdy inne działają poprawnie. Nie rozumiem, co się dzieje, ponieważ niczego nie zmieniłem i przestało działać ... Mam dwa projekty z tą samą konfiguracją, jedna działa świetnie, druga daje mi takie błędy, zawsze .. – RuiMochila

+0

Proszę zignorować poprzedni. Dziękuję za polecenie carrierwave-aws, sprawdzę to. Na niektórych obrazach pojawiały się powtarzające się błędy, podczas gdy inne działają poprawnie. Nie rozumiem, co się dzieje, ponieważ niczego nie zmieniłem i przestało działać ... Mam dwa projekty z tą samą konfiguracją, jedna działa świetnie, druga daje mi takie błędy, zawsze ... – RuiMochila