2014-09-23 29 views
17

İki gün boyunca, kahramanca üretim ortamında sidekiq çalışmasıyla uğraşıyorum. Benzer konularla ilgili mevcut tüm belgeleri okudum ve hala çalışan bir çözüm üretemedim, gerçekten biraz yardım istiyorum!sidekiq, Heroku'da sidekiq.pid dosyasını üretmiyor, Redistogo ile kullanıyor

Heroku üzerinde dağıtımını yaptıktan sonra

, benim app çöker ve aşağıdaki hata yığın izleme olsun:

2014-09-23T23:38:40.905093+00:00 app[worker.1]: No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid 
2014-09-23T23:38:40.905122+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `<main>' 
2014-09-23T23:38:40.905119+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/bin/sidekiq:7:in `<top (required)>' 
2014-09-23T23:38:40.905117+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `write_pid' 
2014-09-23T23:38:40.905115+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `open' 
2014-09-23T23:38:40.905121+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/bin/sidekiq:23:in `load' 
2014-09-23T23:38:40.905118+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:41:in `parse' 
2014-09-23T23:38:40.905114+00:00 app[worker.1]: /app/vendor/bundle/ruby/2.1.0/gems/sidekiq-3.2.5/lib/sidekiq/cli.rb:347:in `initialize' 
2014-09-23T23:38:39.588001+00:00 heroku[worker.1]: State changed from starting to up 

Birincisi, sidekiq benim yerel makinede düzgün çalışıyor. Ben redku için heroku REDISTOGO kullanıyorum, yerel üretim, sidekiq doğru REDISTOGO işaret ve iyi çalışıyor. İkinci olarak, yığın izine göre, özellikle bu çizgi No such file or directory @ rb_sysopen - /app/tmp/pids/sidekiq.pid; Bu nedenle, bir nedenle sidekiq.pid dosyasının heroku üzerinde çalışırken doğru şekilde oluşturulmadığını düşünmeme sebep oluyor. Yerel ortamda, app/tmp/pids/ dizininde uygulamayı başlattığımda her seferinde sidekiq.pid dosyası oluşturulur ve her seferinde farklı bir pid numara atar. Ben guessing yaşıyorum ki bu e-postada çalışırken, sidekiq bu dosyadan okumaya çalışmış ancak bulamadım. Benim sidekiq.rb

Sidekiq.configure_server do |config| 
    config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"} 
end 

Sidekiq.configure_client do |config| 
    config.redis = { :url => ENV['REDISTOGO_URL'], :namespace => "mynamespece"} 
end 

Güncelleme 1 benim config/sidekiq.yml

--- 
:verbose: true 
:pidfile: ./tmp/pids/sidekiq.pid 
:concurrency: 25 
# Set timeout to 8 on Heroku, longer if you manage your own systems. 
:timeout: 8 
:queues: 
    - carrierwave 
İşte

olduğu içeriği

web: bundle exec rails server 
worker: bundle exec sidekiq -C config/sidekiq.yml 
İşte

olan içerikleri: Burada

benim Procfile yılında içerikleri ise

sidekiq ile uyumlu olarak carrierwave ve carrierwave-backgrounder kullanıyorum.

+0

Neden bir pid dosyası oluşturuyorsunuz? –

+0

@MikePerham Hey Mike, sidekiq'in yazarı olduğunu biliyorum, bu konuya ilginiz için teşekkür ederim! Kasıtlı olarak pid kullanmıyordum.Ben sidekiq için yeniyim ve bu varsayılan davranış olduğunu düşündüm, çünkü benim uygulamam sırasında herhangi bir yerde pid'e referans veren herhangi bir konfigürasyona katılmadım. Ne önerirsiniz, yanlış bir şey yapıyorum? Belki pid kullanmamak sidekiq uygulamak için en uygun yoldur? Pid bölümünde çok fazla belge bulamadım. – Stephens

+0

@MikePerham yerel ortamımda, her zaman foreman'ı kullanıyorum, aşağıdaki satırları görüyorum: '17:28:57 web.1 | pid ile başladı 20788' ' 17:28:57 worker.1 | pid ile başladı 20789' Pid numarası her seferinde farklı olurdu. – Stephens

cevap

24

Bu sorun, aşağıdaki eylemlerden tarafından çözüldüğünü:

:pidfile: ./tmp/pids/sidekiq.pid 

2: doğru yönde beni işaret için @MikePerham için

1) sayesinde, ilk benim sidekiq.yml dosyasında bu satırı kaldırıldı

web: bundle exec rails server -p $PORT 
worker: bundle exec sidekiq -C config/sidekiq.yml 

Şimdi kırmızı ile düzgün sidekiq çalışıyor:) Ardından, benim Procfile yılında, ben kökeni yerine aşağıdaki satırı kullanmak zorunda Benim için heroku istogo. Ben yararlı havuzuna dizin eklemek ve uygulamayı yeniden dağıtmak bulundu

+0

Bu çılgın bir çekicilik gibi çalıştı. Çok teşekkür ederim! –

8

kök tmp dizinde pids dizini yaparak giderilmiştir.

mkdir -p tmp/pids 
touch tmp/pids/.gitkeep 
git add -f tmp/pids/.gitkeep 
git commit -m 'Keep tmp/pids directory in repo' 

Bu yardımcı olur umarım.

+0

Çalışıyor. Teşekkürler! –

+0

Bu çalışır. Raylar 4, Foreman ve Sidekiq. –

+0

Çalışıyor. Teşekkürler! – Jason