Вкладка Facebook с веерными воротами с Rails 3 - PullRequest
1 голос
/ 23 сентября 2011

Я следовал инструкциям CoverHound, см. Как создать фанатскую вкладку Facebook с Rails и JavaScript .

Все прошло гладко до шага 3 в разделе Служитьсодержимое для вашего приложения FB с приложением Rails При предварительном просмотре с использованием моего локального сервера я получил ошибку.Типичная проблема безопасности рельсов, просто решаемая добавлением

protect_from_forgery :except => :index

в мой FacebookController.Оттуда я был золотым, проверил его на своем сайте и работаю плавно.Теперь, чтобы добавить Gate!

Добавлен оператор if в мой файл facebook index.html.erb

<% if user_likes_page? %>
<div class="fans_tickets"></div>
<% else %>
<div class="like_tickets"></div>
<% end %>

В FacebookHelper я добавил следующее, чтобы проверить подобное и проанализироватьподписанный запрос от Facebook

def user_likes_page?
  fb_request = parse_signed_request
  return fb_request['page']['liked'] if fb_request && fb_request['page']
end

def parse_signed_request
  if params[:signed_request].present?
    sig, payload = params[:signed_request].split('.')
    payload += '=' * (4 - payload.length.modulo(4))
    data = Base64.decode64(payload.tr('-_','+/'))
    JSON.parse( data )
  end
rescue Exception => e
  Rails.logger.warn "!!! Error parsing signed_request"
  Rails.logger.warn e.message
end

При тестировании на моем локальном хосте, Это прекрасно работает, если мне не понравилась страница, я вижу div с информацией, говорящей, что мне нравится страница с информацией о конкурсе,когда мне понравилась страница, она показывает мне информацию о конкурсах, упомянутых в не фанатском div.Отлично!

Отправьте его на сервер Live, и я получу страницу с сообщением об ошибке.В своих Журналах я вижу это ...

2011-09-23 12:38:29 INFO --   Processing by FacebookController#index as HTML
2011-09-23 12:38:29 INFO --   Parameters: {"signed_request"=>"-IIMtqxxUICCyfCOxpsBMvApiaLgEZAkr1tQltvK_bI.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTMxNjgwMzEwNywicGFnZSI6eyJpZCI6IjEzNzg2NDQ2NjMxMDQwOSIsImxpa2VkIjp0cnVlLCJhZG1pbiI6dHJ1ZX0sInVzZXIiOnsiY291bnRyeSI6ImNhIiwibG9jYWxlIjoiZW5fVVMiLCJhZ2UiOnsibWluIjoyMX19fQ"}
2011-09-23 12:38:29 WARN -- !!! Error parsing signed_request
2011-09-23 12:38:29 WARN -- undefined method `encoding' for #<String:0x7f845221da58>
2011-09-23 12:38:29 INFO -- Rendered facebook/index.html.erb within /layouts/facebook (37.4ms)
2011-09-23 12:38:29 INFO -- Completed   in 77ms
2011-09-23 12:38:29 FATAL -- 
ActionView::Template::Error (undefined method `[]' for true:TrueClass):
    1: <% if user_likes_page? %>
    2:  <div class="fans_flames_tickets"></div>
    3: <% else %>
    4:  <div class="like_flames_tickets"></div>
  app/helpers/facebook_helper.rb:4:in `user_likes_page?'
  app/views/facebook/index.html.erb:1:in `_app_views_facebook_index_html_erb___1213205873_70103145189880_0'
  app/controllers/facebook_controller.rb:6:in `index'

Я не могу понять, что может быть причиной, код, похоже, не полагается на что-либо от самого сервера ...Буду признателен за любую помощь!

о, и я не продолжил: "Как я могу получить идентификатор пользователя Facebook посетителя, просматривающего мою фан-страницу?"как мне это не нужно, это просто для подобной информации.



ОБНОВЛЕНИЕ

Разобрался сотладка ... должна была быть очевидной.Мой локальный хост реализовывал JSON с работающим Guard.Поскольку Guard работал только в моем режиме разработки, JSON был установлен при разработке.Устанавливается на производство и престиж ...

Почувствуйте себя немым, если не заметили этого раньше!Спасибо за помощь Dave & Keith

1 Ответ

0 голосов
/ 24 сентября 2011

Я почти уверен, что ошибка undefined method 'encoding' for #&lt;String... связана с запуском приложения на ruby ​​1.8.7 против 1.9.2 или выше.то есть похоже, что ваш Live-сервер работает под управлением 1.8.7 или, возможно, Ruby Enterprise Edition.

Если вы можете, переключите ваш живой сервер на версию ruby ​​1.9.2 и посмотрите, исправит ли это.В противном случае я выкопаю немного больше в эти выходные.

Приветствия!

-kw

...