У меня возникла странная ситуация, когда я могу читать и сохранять информацию из ответа 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?
Что вы видите, если вы проверите модель Aquarist через консоль. Есть ли этот столбец? –
К сожалению, я не вижу фактическую базу данных PG, поскольку я на бесплатной версии героку. Тем не менее мои миграции вверх/вниз отлично работали в производстве без ошибок, поэтому я уверен, что столбцы создаются. – xander
Посмотрите через консоль. пульт управления heroku; Aquarist.new –