Ошибка Sidekiq Неинициализированная Константа

у меня проблема с sidekiq. В основном мы получаем NameError: uninitialized constant на нашей настройке sidekiq, которая приводит к сбою большого количества заданий.

журнал ошибок говорит:

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'

код здесь:

# 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

и lib / папка автоматически загружается с остальными конфигурациями.

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

Я понятия не имею, почему это происходит. Кажется, это происходит чаще когда мы развертываемся, но, кажется, это происходит достаточно часто в противном случае.

я следовал следующей теме:https://github.com/mperham/sidekiq/issues/331 но он, похоже, не предлагает решения, кроме добавления папки lib в autoload_paths.

Я:

gem 'rails', '3.2.13' gem 'sidekiq', '> = 2.7.5'

любая помощь будет высоко оценено.

2 ответов


добавить


Я думаю, что проблема здесь, скорее всего, пути загрузки, как упоминалось выше.

примечание-Я не уверен, что опция autoload_paths требуется, поскольку Rails игнорирует это вне режима разработки

в любом случае - у меня была аналогичная проблема: хотя мой код был обновлен, на работу звонила старой версии кода.

в конце концов я понял, что есть рабочие, которые работают, которые были старыми. Я заметил только потому, что трассировка стека показала sidekiq версия gem была 2.15.0, и я обновил 2.17.0

Я убил другие процессы, и он работал нормально