1

У меня возникла странная ситуация, когда я могу читать и сохранять информацию из ответа Facebook через Omniauth при запуске локально, но когда я нажимаю точный код на Heroku, (из моих журналов) подходит к столбцу first_name.Ошибка OmniAuth ActiveRecord при нажатии на Heroku

Processing by AdminController#index as HTML 
Rendered admin/list_users.html.erb within layouts/application (60.9ms) 
Completed 500 Internal Server Error in 163ms 

ActionView::Template::Error (undefined method `first_name' for #<Aquarist:0x00000001ee8>): 
:  <td>Nickname: <%= aquarist.nickname %> 
:  32:   Last: <%= aquarist.last_name %></td> 
:  29:  <td><%= aquarist.name %></td> 
:  31:   First: <%= aquarist.first_name %> 
:  34:  <td><%= aquarist.email %></td> 
:  28:  <td><%= image_tag(aquarist.image, :width => '20') %></td> 
:  33:  <td><%= aquarist.provider %></td> 

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

Вот мой facebook обратного вызова от OmniAuth:

--- !ruby/hash:OmniAuth::AuthHash 
provider: facebook 
uid: '12456789' 
info: !ruby/hash:OmniAuth::AuthHash::InfoHash 
    email: [email protected] 
    name: Alex 
    first_name: Alex 
    last_name: Lastname 
    image: http://graph.facebook.com/123456789/picture?type=square 
    urls: !ruby/hash:Hashie::Mash 
    Facebook: http://www.facebook.com/profile.php?id=12456789 
credentials: !ruby/hash:Hashie::Mash 
    token: AACCCCb1i3ZALXEMfGxJtKZA 
    expires_at: 13378794564 
    expires: true 
extra: !ruby/hash:Hashie::Mash 
    raw_info: !ruby/hash:Hashie::Mash 
    id: '12456789' 
    name: Alex Lastname 
    first_name: Alex 
    last_name: Lastname 
    link: http://www.facebook.com/profile.php?id=12456789 
    gender: male 
    email: [email protected] 
    timezone: 11 
    locale: en_US 
    verified: true 
    updated_time: '2012-02-01T12:51:00+0000' 

Как вы можете видеть, что я заперт вниз мой профиль facebook, так что не ждите, чтобы получить все дополнительные информацию (например, статус отношений и т. д.).

Я пытаюсь создать базовый профиль новых пользователей («аквариумистов» в моей терминологии), которые подберут некоторую дополнительную информацию, которую они с удовольствием передадут из facebook.

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

Вот код, я использую, чтобы написать профиль

def self.create_with_omniauth(auth) 
create! do |aquarist| 
    aquarist.provider  = auth["provider"] 
    aquarist.uid    = auth["uid"] 
    aquarist.name   = auth["info"]["name"] 
    aquarist.nickname  = auth["info"]["nickname"] 
    aquarist.email   = auth["info"]["email"] 
    aquarist.image   = auth["info"]["image"] 
    aquarist.first_name  = auth["extra"]["raw_info"]["first_name"] 
    aquarist.last_name  = auth["extra"]["raw_info"]["last_name"] 
    aquarist.user_location = auth["extra"]["raw_info"]["user_location"] 
    aquarist.user_hometown = auth["extra"]["raw_info"]["user_hometown"] 
    aquarist.age    = auth["extra"]["raw_info"]["age"] 
    aquarist.locale   = auth["extra"]["raw_info"]["locale"] 
    aquarist.gender   = auth["extra"]["raw_info"]["gender"] 
end 
end 

Я тогда с помощью этого кода, чтобы отобразить эту информацию в профиле (в таблице):

<% @aquarists.each do |aquarist|%> 
<tr class="tbody"> 
    <td><%= aquarist.uid %></td> 
    <td><%= image_tag(aquarist.image, :width => '20') %></td> 
    <td><%= aquarist.first_name %></td> 
    ..and so on 

Идентичный информация когда я нажимаю этот код, появляется ошибка активной записи, как указано выше.

Если, однако, я удаляю любой из столбцов из раздела [raw_info] [extra], код работает на Heroku (например, полное имя, UID, поставщик и т. Д. Все сохранены в db).

То, что меня полностью смущает, заключается в том, что этот код работает локально - так что я собираюсь правильно запросить данные из раздела «raw_info».

Я уже подтвердил, что выполнил мои миграции на Heroku, и у вас есть - как некоторые другие Q & Как и предлагается - также используется «перезагрузка героя» для обеспечения того, чтобы столбцы базы данных собирались в приложении.

Это мой вход OmniAuth в моем Gemfile:

gem 'omniauth' 
gem 'omniauth-twitter' 
gem 'omniauth-facebook' 

Я бег Rails 3.1.3 и 9.1.2 Postgres локально. Я использую бесплатную базу данных Heroku, которая, я считаю, запускает PG 8.x.

Вот выдержка из миграции файла, который создает особые столбцы:

def change 
    add_column("aquarists", "first_name", :text, :default => "") 
    add_column("aquarists", "last_name", :text, :default => "") 
    add_column("aquarists", "gender", :text, :default => "") 
    add_column("aquarists", "user_location", :text, :default => "") 
    add_column("aquarists", "user_relationships", :text, :default => "") 
    add_column("aquarists", "user_hometown", :text, :default => "") 
    add_column("aquarists", "age", :integer) 
    add_column("aquarists", "locale", :text, :default => "") 
    add_column("aquarists", "image", :text, :default => "") 
    add_column("aquarists", "timezone", :text, :default => "") 
    add_column("aquarists", "last_login", :datetime) 
end 

И это то, что возвращается, когда я бегу Heroku консоль:

$ heroku run console 
Running console attached to terminal... up, run.1 
Loading production environment (Rails 3.1.3) 
irb(main):001:0> Aquarist.new 
=> #<Aquarist id: nil, nickname: nil, name: nil, email: nil, created_at: nil, updated_at: nil, provider: nil, uid: nil, admin: false, age: nil, locale: "", image: "", timezone: "", last_login: nil, visits: nil> 
irb(main):002:0> 

Любые взгляды на то, что может происходить когда мой код поражает Heroku? Это проблема с версией Postgres?

+0

Что вы видите, если вы проверите модель Aquarist через консоль. Есть ли этот столбец? –

+0

К сожалению, я не вижу фактическую базу данных PG, поскольку я на бесплатной версии героку. Тем не менее мои миграции вверх/вниз отлично работали в производстве без ошибок, поэтому я уверен, что столбцы создаются. – xander

+0

Посмотрите через консоль. пульт управления heroku; Aquarist.new –

ответ

0

Выяснил, что это был ... поврежденный файл миграции.Где-то вдоль линии я сделал (глупую) модификацию оригинального файла миграции и корректно выполнил его в своей среде разработки, но забыл отменить изменение в Интернете.

Не повторю этого, я мог бы сделать это с 8 или около того часов назад в моей жизни. :)

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