2016-08-03 27 views
0

Ich versuche, meine Rails-App dazu zu bringen, Hintergrund-Jobs mit Sidekiq zu verarbeiten und Sidekiq mit Redis-to-Go auf Heroku zu verbinden. Hier ist mein Procfile:Heroku Error: ArgumentError: ungültiges uri-Schema ''

web: bundle exec puma -C config/puma.rb 
worker: bundle exec -C config/sidekiq.yml 

Hier ist meine die Sidekiq.rb intializer Datei:

require 'sidekiq' 

Sidekiq.configure_client do |config| 
    config.redis = { url: ENV['REDIS_PROVIDER'] } 
end 

Sidekiq.configure_client do |config| 
    config.redis = { url: ENV['REDIS_PROVIDER'] } 
end 

Die REDIS_PROVIDER Variable in Heroku gesetzt. Gemäß den mitgelieferten Anweisungen here habe ich auch eine Intializer-Datei redis.rb hinzugefügt. Hier sind die Inhalte:

uri = URI.parse(ENV["REDIS_PROVIDER"]) 
REDIS = Redis.new(:url => uri) 

Ich bekomme den folgenden Fehler und nicht sicher, wie es gelöst werden soll. Heroku ist auch einen H10 Fehler wirft

[3] ! Unable to load application: ArgumentError: invalid uri scheme ' 

/app/vendor/bundle/ruby/2.2.0/gems/redis-3.3.0/lib/redis/client.rb:416:in `_parse_options': invalid uri scheme '' (ArgumentError) 

UPDATE:

ich zu einer früheren Version auf Heroku rollte zurück und entfernt das redis Juwel aus dem gemfile, entfernt, um die redis intializer Datei, und die App ist nicht mehr krachend. Doch noch Hintergrundjobs nicht arbeiten und ich diese Fehler im Protokoll erhalten:

heroku/worker.1: Starting process with command `bundle exec -C config/sidekiq.yml` 
heroku/worker.1: State changed from starting to up 
app/worker.1: bundler: command not found: -C 
heroku/worker.1: Process exited with status 127 
heroku/worker.1: State changed from up to crashed 
app/worker.1: Install missing gem executables with `bundle install` 

Warum ist das System nicht die Konfigurationsparameter zu akzeptieren die Arbeiter zum Absturz bringen?

Der Fehler des ungültigen uri Schema weiterhin besteht:

app/web.1: Completed 500 Internal Server Error in 303ms (ActiveRecord: 0.0ms) 
app/web.1: ArgumentError (invalid uri scheme ''): 

sidekiq.yml Datei

# Sample configuration file for Sidekiq. 
# Options here can still be overridden by cmd line args. 
# Place this file at config/sidekiq.yml and Sidekiq will 
# pick it up automatically. 
--- 
:verbose: false 
:concurrency: 10 

# Set timeout to 8 on Heroku, longer if you manage your own systems. 

: timeout: 8

# Sidekiq will run this file through ERB when reading it so you can 
# even put in dynamic logic, like a host-specific queue. 
# http://www.mikeperham.com/2013/11/13/advanced-sidekiq-host-specific-queues/ 
:queues: 
    - critical 
    - default 
    - low 

# you can override concurrency based on environment 

Produktion: : concurrency: 25 staging: : Nebenläufigkeit: 1 0

Antwort

3

Sie verwenden REDIS_PROVIDER nicht korrekt. Bitte überprüfen Sie die Dokumentation erneut.

https://github.com/mperham/sidekiq/wiki/Using-Redis#using-an-env-variable

+1

prüfte ich die Dokumentation noch einmal und ich glaube, ich bin es richtig verwendet wird. Es heißt: 'Setzen Sie den Parameter REDIS_PROVIDER env var auf den Namen des env var, der die Redis-Server-URL enthält. (Beispiel mit RedisGreen: setze REDIS_PROVIDER = REDISGREEN_URL und Sidekiq benutzt den Wert von REDISGREEN_URL env var bei der Verbindung zu Redis.) 'Die Variable REDIS_PROVIDER wird auf die Variable REDISTOGO_URL in heroku gesetzt, die' redis: // redistogo: xxxxx' enthält. – Jarrel09

+1

Ich schrieb Sidekiq; dein Vertrauen ist fehl am Platz. ;-) Der REDIS_PROVIDER Wert sollte keine URL sein, daher ist 'URI.parse (ENV ['REDIS_PROVIDER'])' falsch. –

+0

Der Wert von REDIS_PROVIDER sollte buchstäblich "REDISTOGO_URL" sein. –