我按照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;基思
答案 0 :(得分:0)
我很确定undefined method 'encoding' for #<String...
错误与在ruby 1.8.7和1.9.2或更高版本上运行应用程序有关。即看起来你的Live服务器运行1.8.7或可能是Ruby Enterprise Edition。
如果可以,请将您的实时服务器切换到ruby 1.9.2版本,看看是否可以修复它。否则我本周末会再挖一点。
干杯!
-kw