2012-12-19 2 views
1

Я новичок в Ruby, Sinatra и Pusher, так что это основной вопрос. Я пытаюсь аутентифицировать клиента 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 обеспечивает Scripts/auth_server.rb файл с требуемой реализации. Здесь документируется инструкция по установке: https://github.com/lukeredpath/libPusher/wiki/Adding-libPusher-to-your-project.