Только производственная ошибка ActionView::Template::Error (невозможно преобразовать символ в целое число)

Я пытаюсь развернуть сайт на верфи, но получаю сообщение об ошибке, которая кажется ошибкой форматирования данных. Это происходит только при развертывании в производственном режиме на кластере серверов. используя ту же БД и кодовую базу локально или на VPS, у нас нет проблем. Мне кажется, что ошибки показывают, что внезапно возникает несоответствие типа массива / хэша некоторым пользовательским данным. Кажется, что она всегда прослеживается до модели, в которой ей поручено получить "варианты". Ошибки вызываются шаблонами, требующими доступа к проверкам пользовательских атрибутов.

production log: 
 Completed 500 Internal Server Error in 32ms
 ** [Airbrake] Failure: Net::HTTPClientError

 ActionView::Template::Error (can't convert Symbol into Integer):
    18:         = admin_user.username
    19:         = username_helper(admin_user)
    20:       %td= country_image admin_user
    21:       %td= admin_user.account_name
    22:       %td
    23:         - if admin_user.is_a?(Creative)
    24:           - if admin_user.is_juror?
  app/models/user.rb:79:in `[]'
  app/models/user.rb:79:in `has_option?'
  app/models/contest_holder.rb:77:in `is_client_type?'
  app/models/contest_holder.rb:81:in `is_agent?'
  app/models/contest_holder.rb:70:in `ao_client_name'
  app/models/contest_holder.rb:115:in `account_name'
  app/views/admin/users/_users.html.haml:21:in `block in _app_views_admin_users__users_html_haml__845309245401675393_70184787547360'

trace:
ActionView::Template::Error: can't convert Symbol into Integer
Sample stack trace (show Rails)
 /app/models/user.rb:  79:in `[]'
 /app/models/user.rb:  79:in `has_option?'
…P/releases/20130814153250/app/models/contest_holder.rb:  77:in `is_client_type?'
…P/releases/20130814153250/app/models/contest_holder.rb:  81:in `is_agent?'
…P/releases/20130814153250/app/models/contest_holder.rb:  70:in `ao_client_name'
…P/releases/20130814153250/app/models/contest_holder.rb: 115:in `account_name'
…1/gems/haml-4.0.3/lib/haml/helpers/action_view_mods.rb:  10:in `block in render_with_haml'
…ed_gems/ruby/1.9.1/gems/haml-4.0.3/lib/haml/helpers.rb:  89:in `non_haml'
…1/gems/haml-4.0.3/lib/haml/helpers/action_view_mods.rb:  10:in `render_with_haml'
…ms/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:  68:in `block in call'
…ms/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:  56:in `each'
…ms/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router.rb:  56:in `call'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 184:in `call!'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 164:in `call'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 184:in `call!'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 164:in `call'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 184:in `call!'
…uby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/strategy.rb: 164:in `call'
…ruby/1.9.1/gems/omniauth-1.1.4/lib/omniauth/builder.rb:  49:in `call'
…VP/releases/20130814153250/lib/middleware/force_ssl.rb:   8:in `call'
…ems/ruby/1.9.1/gems/warden-1.2.1/lib/warden/manager.rb:  35:in `block in call'
…ems/ruby/1.9.1/gems/warden-1.2.1/lib/warden/manager.rb:  34:in `catch'
…ems/ruby/1.9.1/gems/warden-1.2.1/lib/warden/manager.rb:  34:in `call'
…ndled_gems/ruby/1.9.1/gems/rack-1.4.5/lib/rack/etag.rb:  23:in `call'
…/ruby/1.9.1/gems/rack-1.4.5/lib/rack/conditionalget.rb:  25:in `call'
…/1.9.1/gems/rack-1.4.5/lib/rack/session/abstract/id.rb: 210:in `context'
…/1.9.1/gems/rack-1.4.5/lib/rack/session/abstract/id.rb: 205:in `call'
…es/20130814153250/config/initializers/session_store.rb:  10:in `call'

код из user.rb, который, кажется, является точкой контакта для ошибки:

def has_option?(option)
 self.options[option] && self.options[option].to_s == "1"
end

Пример значения параметров: --- !map:ActiveSupport::HashWithIndifferentAccess is_agent: "1"

2 ответа

Решение

Пришел, чтобы узнать, что проблема заключалась в дополнительном разрыве строки в файле базы данных. В частности, приложение использует сериализованные данные yaml в достаточном количестве. Добавлен дополнительный разрыв строки между хеш-ключом yaml и значением, вызывающим ошибку в объекте. Сначала мы попытались создать сценарий для очистки базы данных и обнаружили, что он кажется просто поврежденным из исходного файла базы данных.

Это было то, что не так с моим делом

Error : ActionView::Template::Error (can't convert Symbol into Integer)

Причина:

По моему хамл.

Я пытался получить доступ к свойству из объекта JSON.

object[:key]

Но на самом деле это был массив json (массив объектов из активной записи where). Я только что отфильтровал первый элемент.

Надеюсь, кто-то найдет полезным.

Другие вопросы по тегам