2013-03-22 20 views
6

sidekiq ile ilgili bir sorun yaşıyorum. Temel olarak sidekiq kurulumumuzda NameError: uninitialized constant alıyoruz, bu da çok sayıda işin başarısız olmasına neden oluyor.Sidekiq hatası Başlatılmamış Sabit

hata günlüğü diyor:

NameError: uninitialized constant GameUser::Lock 
/data/@myapp/releases/20130321230952/app/models/game_user.rb:71:in `node_calls_base_get_user' 
/data/@myapp/shared/bundled_gems/ruby/1.9.1/gems/sidekiq-2.8.0/lib/sidekiq/processor.rb:45:in `block (3 levels) in process' 
/data/@myapp/shared/bundled_gems/ruby/1.9.1/gems/sidekiq-2.8.0/lib/sidekiq/middleware/chain.rb:109:in `call' 

kod buradadır:

Kilit Kütüphanede tanımlanır

# app/models/game_user.rb 
def self.node_calls_base_get_user(serial, game_name) 
    if Lock.get("user:#{id}") # Set up lock to prevent multiple users to be created  
    Lock.delete("user:#{id}") 
    end 
    return false 
end 
:

# lib/lock.rb 
class Lock 
    def self.get(key) 
    lock = CACHE.add("lock:#{key}", 1, 5) # Let lock autoexpire after 5 seconds 
    return true 
    end 
end 

Ve lib/klasörü otomatik yüklenene Konfigürasyonların geri kalanı ile.

module Myapp 
    class Application < Rails::Application 
    ... 
    # Custom directories with classes and modules you want to be autoloadable. 
    config.autoload_paths += %W(#{config.root}/lib) 
    ...  
    end 
end 

Bunun neden olduğu hakkında hiçbir fikrim yok. Yaygınlaştığımızda daha sık görünse de, aksi takdirde yeterince sık görülür.

Aşağıdaki iletiyi takip ediyorum: https://github.com/mperham/sidekiq/issues/331, ancak lib klasörü autoload_paths'a ekleyerek bir çözüm sunmuyor gibi görünüyor.

kullanıyorum:

mücevher 'raylar', '3.2.13' mücevher 'sidekiq', bir Yardım büyük apreciated olacağını

'> = 2.7.5'.

cevap

9

klasörünü eager_load_paths'a ekleyin. Bu autoload_paths farklıdır. Sidekiq sınıfları anında yüklemez, bu yüzden hevesle yüklenmemiş bir sabite erişmeye çalıştığınızda hatalar alırsınız.

Yani application.rb

config.autoload_paths += %W(#{config.root}/lib) 
config.eager_load_paths += %W(#{config.root}/lib) 
+0

Bunları yolları eklendi ve hala duyuyorum ettik iyi çalıştı tüm sınıflarım için aynı hatayı alıyorum. Denediğim başka şeyler var mı? – kakubei

+0

Şimdi bu hatayı alıyorum - Kakubei, bunu çözdün mü? – bodacious

+0

Maalesef hayır. Pes etmem ve başka şeylere geçmem gerekti, ama asla çözmedim, buradaki hiçbir ipucu benim için işe yaramadı :( – kakubei

0

I yukarıda da belirtildiği gibi burada sorun büyük olasılıkla yük yolları olduğunu düşünüyorum.

Not - Ben autoload_paths seçenek Raylar olarak gereklidir emin değilim

Neyse geliştirme modunun bunu dışarıda yok sayar - Ben benzer bir sorunu başlamıştı: kodum güncellendi rağmen, iş eski aramaya çalıştım kodun sürümleri.

Sonunda, eski çalışan işçiler olduğunu anladım. Yığın izleme sidekiq mücevher versiyonu 2.15.0 olduğunu gösterdi çünkü sadece fark ettim ve ben diğer işlem öldü

2.17.0 güncellenmiş etmişti ve onu

İlgili konular