2016-12-01 6 views
-1

Resque.enqueu를 사용하는 heroku에서 Redis 및 redistogo를 사용하여 백그라운드 작업을 예약하는 레일 앱이 있습니다.Heroku, Rails, Resque, Redis : Errno :: ETIMEDOUT으로 인해 모든 작업이 실패했습니다.

잡스는 정상적으로 작동 했었지만 몇 시간 (몇 주, 100 % 일자리) 동안 실패한 것으로 나타났습니다.

내가 오류 :

예외의 errno : ETIMEDOUT 오류 연결 시간이 초과 - 연결 (2)

그리고 스택 추적 :

> /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `initialize' 
> /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `open' 
> /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:878:in `block in 
> connect' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/timeout.rb:52:in 
> `timeout' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:877:in 
> `connect' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:862:in 
> `do_start' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:851:in 
> `start' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1373:in 
> `request' /app/vendor/ruby-2.0.0/lib/ruby/2.0.0/net/http.rb:1131:in 
> `get' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/connection.rb:121:in `block in request' 
> /app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in 
> `block in instrument' 
> /app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications/instrumenter.rb:20:in 
> `instrument' 
> /app/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.1/lib/active_support/notifications.rb:164:in 
> `instrument' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/connection.rb:118:in `request' 
> /app/vendor/bundle/ruby/2.0.0/gems/shopify_api-4.0.6/lib/active_resource/connection_ext.rb:13:in `request_with_detailed_log_subscriber' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/connection.rb:82:in 
> `block in get' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/connection.rb:216:in `with_auth' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/connection.rb:82:in 
> `get' 
> /app/vendor/bundle/ruby/2.0.0/gems/activeresource-4.0.0/lib/active_resource/custom_methods.rb:57:in 
> `get' 
> /app/vendor/bundle/ruby/2.0.0/gems/shopify_api-4.0.6/lib/shopify_api/countable.rb:4:in 
> `count' /app/app/models/shop.rb:263:in `unscanned_customers' 
> /app/app/models/shop.rb:230:in `shopify_customers' 
> /app/app/models/shop.rb:144:in `bulk_scan' 
> /app/app/workers/bulk_scanner.rb:16:in `perform' 

나는 생각했다 어쩌면 그것은 Redis 또는 redistogo에 제대로 연결하지 않는 것과 관련이 있습니다. 여기에 내가 가지고있는 관련 초기화 코드를 다음과 같습니다

resque.rb :

Resque.redis = RedisConnection.connection 

redis_connection.rb :

class RedisConnection 
    def self.close 
    connection.quit 
    end 

    def self.connection 
    @connection ||= new_connection 
    end 

    def self.new_connection 
    uri = URI.parse(ENV['REDISTOGO_URL'] || 'redis://localhost:6379/') 

    Redis.new(host: uri.host, 
       port: uri.port, 
       password: uri.password, 
       thread_safe: true, 
       :timeout => 1) 
    end 
end 

내 응용 프로그램에서 Resque.redis 또는 @connection를 호출 할 경우, Redis 인스턴스를 반환합니다. 이 연결 오류의 원인은 무엇입니까? 어디서 문제를 해결할 수 있습니까?

답변

1

Backtrace를 보면 Shopify API 연결 제한 시간 일 수 있습니까? unscanned_customers은 Countable Shopify 컬렉션으로 간주되며 고객 검색을 시도 할 때 문제가 발생합니다.

여기 내 디버깅을 시작할 것입니다 :

shop_url = "https://#{API_KEY}:#{PASSWORD}@SHOP_NAME.myshopify.com/admin" 
ShopifyAPI::Base.site = shop_url 

는 Shopify API를 참조하십시오 > 'count' /app/app/models/shop.rb:263:in 'unscanned_customers'

또한, I 개인 응용 프로그램 API 키와 비밀번호를 사용하여 서버에서 Shopify에 연결을 시도 할 것이다 필요한 경우 자세한 내용을 참조하십시오. Shopify API Readme

연결 문제를 해결하는 데 도움이됩니다.

건배.