2012-12-19 53 views
1

我是Ruby,Sinatra和Pusher的新手,所以这是一个基本问题。我试图验证推送客户端(使用iOS演示代码https://github.com/lukeredpath/libPusher)。下面的服务器代码失败,错误时的iOS客户端尝试加入一个存在通道:获取渲染参数错误:什么是正确的语法或用法?

ArgumentError - wrong number of arguments (1 for 2): 
    /Users/waveocean/.rvm/gems/ruby-1.9.3-p327/gems/sinatra-1.3.3/lib/sinatra/base.rb:665:in `render' 
    web.rb:13:in `auth' 
    web.rb:26:in `block in <main>' 
    /Users/waveocean/.rvm/gems/ruby-1.9.3-p327/gems/sinatra-1.3.3/lib/sinatra/base.rb:1265:in `call' 

... snipped for brevity ... 

下面是代码:

require 'sinatra' 
require 'pusher' 
require 'thin' 
Thin::HTTP_STATUS_CODES[403] = "FORBIDDEN" 

Pusher.app_id = 'MY-APP-ID' 
Pusher.key = 'MY-KEY' 
Pusher.secret = 'MY-SECRET' 

def auth 
    response = Pusher[params[:channel_name]].authenticate(params[:socket_id], {:user_id => 101}) 
    render :json => response 
end 

use Rack::Auth::Basic, "Protected Area" do |username, password| 
    username == 'foo' && password == 'bar' 
end 

post '/presence/auth' do 
    if params[:channel_name] == 'presence-demo' 
     auth 
    else 
    # render :text => "Forbidden", :status => '403' 
    response.status = 403 
    end 
end 

有人能提供建议或渲染的正确使用?

回答

2

这是我发现的。 render与Rails关联,而不是严格的Ruby。为了给西纳特拉路线回应,请使用身份验证方法如下:

def auth 
    response = Pusher[params[:channel_name]].authenticate(params[:socket_id], {:user_id => 101}) 
    [200, {"Content-Type" => "application/json"}, response.to_json] 
end 

事实证明,推动iOS的项目演示提供了所需的实施脚本/ auth_server.rb文件。这里有安装说明文档:https://github.com/lukeredpath/libPusher/wiki/Adding-libPusher-to-your-project