我试着在heroku上使用actioncontroller::live,pub/sub(redis),但它不起作用。
我在用ruby2.0.0p247,rails4,puma。
我想这样聊天。RailsCast(http://railscasts.com/episodes/401-actioncontroller-live?view=asciicast),GitHub(https://github.com/railscasts/401-actioncontroller-live/tree/master/chatter-after)
我的代码是这样的。
初学者消息控制器.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
初学者信息.js.咖啡
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上。彪马和瑞斯正在研究英雄。
我确实在网上搜索过,但没有帮助。请告诉我该怎么做。谢谢你的帮助。
最佳答案
很抱歉,已发现旧线程,但有此问题的任何其他人都可以在其终端中尝试此操作:$ heroku labs:enable websockets