2014-10-08 14 views
6

Ho un lavoratore Sidekiq che funziona bene localmente, ma quando è schierato su Heroku i lavori rimangono bloccati in coda. Sto usando Redis-to-go nano e ho installato e funzionante, e ho ridimensionato il lavoratore a 1 su Heroku e posso vedere che è attivo. Sto solo usando la coda di default - niente di personalizzato o di fantasia. Ecco il mio codice:Lavori di sidekiq bloccati in coda su Heroku

config/unicorn.rb:

Sidekiq.configure_client do |config| 
    config.redis = { size: 1, namespace: 'sidekiq' } 
end 

config/inizializzatori/redis.rb

uri = URI.parse(ENV["REDISTOGO_URL"] || "redis://localhost:6379") 
REDIS = Redis.new(:url => ENV['REDISTOGO_URL']) 

Procfile

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb 
worker: bundle exec sidekiq -c 5 -v -q default 

posso vedere il lavoro in la coda ma non viene elaborata come avviene a livello locale. Qualche consiglio è molto apprezzato - grazie!

+0

provare a eseguire 'Heroku gestita console' ed eseguire il tuo lavoro in modo sincrono' SomeWorker.new .perform (some_arg) ', potrebbe generare un errore e riprogrammare. – Ollie

+0

Ciao, grazie per la rapida risposta. L'esecuzione nella console di heroku ha eseguito le azioni che mi aspettavo (cioè ha generato un nuovo utente con i parametri corretti); tuttavia, non riesco a vedere alcuna prova del fatto che abbia funzionato nell'interfaccia utente Web Sidekiq, ovvero non è stato né accodato né elaborato. qualche idea? –

+0

Una volta ottenuto il lavoro dalla console di heroku, solo per curiosità ho provato a eseguire il lavoro in modo sincrono dall'interno della mia app .... Ma i lavori rimangono bloccati nella coda anche se sto passando gli stessi argomenti . –

risposta

6
Non

sicuro esattamente quale fosse il problema, ma seguendo questo tutorial con alcune modifiche funzionato per me: http://manuelvanrijn.nl/blog/2012/11/13/sidekiq-on-heroku-with-redistogo-nano/

In breve, ho spostato la configurazione in un inizializzatore sidekiq.rb, e cancellato tutto l'url e informazioni sullo spazio dei nomi.

require 'sidekiq' 

Sidekiq.configure_client do |config| 
config.redis = { :size => 1 } 
end 

Sidekiq.configure_server do |config| 
config.redis = { :size => 4 } 
end 

Il collegamento del tutorial a cui ho fatto riferimento dispone di un pratico calcolatore per detemrinare i valori di dimensione corretti. Non sono ancora sicuro se sia questo che mi ha fatto inciampare o qualche versione del conflitto nello spazio dei nomi a cui alludevo nella risposta di Mark.

Inoltre, non ho usato la parte sidekiq.yml del tutorial, perché il wiki di sidekiq dice che le versioni più recenti di rails non mi piace. Invece, ho impostato la concorrenza a 2 nel comando exec fascio del Procfile, in questo modo:

worker: bundle exec sidekiq -c 2 

Spero che questo è utile a chiunque abbia un problema simile in futuro! Grazie a tutti coloro che hanno cercato di aiutare.

0

È necessario configurare il server per utilizzare anche lo stesso spazio dei nomi.

+0

Ciao Mike, grazie mille. Sono entrato nella sezione delle opzioni avanzate del wiki Sidekiq e ho trovato questo esempio: Sidekiq.configure_server do | config | config.redis = {url: 'Redis: //redis.example.com: 7372/12', dello spazio dei nomi: 'MyNamespace'} database_url = ENV [ 'DATABASE_URL'] se database_url ENV [ 'DATABASE_URL'] = "# {database_url}? pool = 25" ActiveRecord :: Base.establish_connection end end L'ho inserito dove configuro il client, cambiando l'url per l'url che vedo nella parte inferiore della mia webUI Sidekiq e cambiando lo spazio dei nomi in modo che corrisponda allo spazio dei nomi del client. Ma senza fortuna. –

1

Basta aggiungere i miei due centesimi qui: nel mio caso, avevo dimenticato di aggiungere il nome della coda di config/sidekiq.yml =]

Problemi correlati