2013-10-08 66 views
1

我想在Heroku上使用ActionController :: Live,Pub/Sub(Redis),但它不起作用。 我正在使用Ruby2.0.0p247,Rails4,Puma。Heroku上的ActionController :: Live(Rails4),Pub/Sub(Redis)不起作用

我想做这样的聊天。 RailsCast(http://railscasts.com/episodes/401-actioncontroller-live?view=asciicast),GitHub(https://github.com/railscasts/401-actioncontroller-live/tree/master/chatter-after

我的代码是这样的。

beginner_messages_controller.rb

class BeginnerMessagesController < ApplicationController 

include ActionController::Live 

def index 
    @beginner_messages = BeginnerMessage.all.order("created_at DESC") 

end 

def create 
    response.headers["Content-Type"] = "text/javascript" 
    attributes = params.require(:beginner_message).permit(:body) 
    @beginner_message = BeginnerMessage.new(attributes) 
    @beginner_message.user = current_user 
    @beginner_message.save 

    json_message = @beginner_message.to_json 
    hash_result = JSON.parse(json_message) 
    hash_result[:username] = @beginner_message.user.username 
    hash_result[:created_at] = @beginner_message.created_at.strftime("%H:%M") 
    @json_result = hash_result.to_json 
    $redis.publish('beginner_messages.create', @json_result) 
end 

def events 
    response.headers["Content-Type"] = "text/event-stream" 
    redis = Redis.new 
    redis.psubscribe('beginner_messages.*') do |on| 
    on.pmessage do |pattern, event, data| 
     response.stream.write("event: #{event}\n") 
     response.stream.write("data: #{data}\n\n") 
    end 
    end 
end 
rescue IOError 
    logger.info "Stream closed" 
ensure 
    redis.quit 
    response.stream.close 
end 

beginner_messages.js.coffee

source = new EventSource('/beginner_messages/events') 
source.addEventListener 'beginner_messages.create', (e) -> 
    beginner_message = $.parseJSON(e.data) 
    $('#chat').prepend($('<li>').text("#{beginner_message.username} $ #{beginner_message.body} #{beginner_message.created_at}").css("listStyleType","none")) 

在本地主机,它的工作,但不能在Heroku。 Puma和Redis正在Heroku上工作。

我在网上搜索过,但没有帮助。请告诉我我该做什么。感谢您的帮助。

+0

恰好是不工作怎么办?你需要更具体。 –

回答

0

对不起,死灵一个古老的线程,但其他人有这个问题可以在他们的终端试试这个:

$ heroku labs:enable websockets