2013-08-14 1 views
0

Я пытаюсь развернуть сайт на машинке, и я продолжаю получать ошибку, которая, кажется, является ошибкой форматирования данных. Это происходит только при развертывании на кластере серверов. используя ту же БД и кодовую базу локально или на VPS, у нас нет проблем. Ошибки показывают мне, что внезапно возникает несоответствие типа array/hash с некоторыми пользовательскими данными. Кажется, что он всегда возвращается к модели, где ему поручено получить «опции». Ошибки запускаются шаблонами, вызывающими доступ к проверкам атрибутов пользователя.Ошибка только для производства ActionView :: Template :: Error (не может преобразовать символ в Integer)

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"

+0

Что такое реализация 'User # options '? –

+0

в вариантах модели либо NULL, либо как объект: ---! Map: ActiveSupport :: HashWithIndifferentAccess is_agent: "1" – user2663127

ответ

1

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

0

Это было то, что случилось с моим случае

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

Причина:

В моей Haml.

Я пытался получить доступ к объекту объекта json.

object[:key] 

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

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

Смежные вопросы