Fan-Gated Facebook Tab与Rails 3

时间:2011-09-23 18:49:16

标签: ruby-on-rails-3 facebook facebook-page

我按照CoverHound的方法来看 How to Create a Fan-gated Facebook Tab with Rails and JavaScript

使用Rails应用程序为您的FB应用程序提供内容之前,一切顺利,直到第3步。当使用我的本地服务器进行预览时,我收到了错误消息。典型的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的signed_request

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用户ID查看我的粉丝页面?”因为我不需要它,它只是为了类似的信息。



更新

通过调试计算它......本来应该是显而易见的。我的本地主机正在使用Guard运行JSON。由于Guard仅在我的开发模式下工作,因此在开发时安装了JSON。安装在生产和预制......

因为没有早点注意到这一点而感到有点愚蠢!感谢Dave&amp; amp;基思

1 个答案:

答案 0 :(得分:0)

我很确定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