【问题标题】:ActionController::Live(Rails4), Pub/Sub(Redis) on Heroku doesn't workHeroku 上的 ActionController::Live(Rails4)、Pub/Sub(Redis) 不起作用
【发布时间】:2013-10-15 22:15:12
【问题描述】:

我正在尝试在 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)

我的代码是这样的。

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。

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

【问题讨论】:

  • 究竟是什么不工作?你需要更具体。

标签: ruby heroku redis ruby-on-rails-4 puma


【解决方案1】:

很抱歉破坏了一个旧线程,但遇到此问题的任何其他人都可以在他们的终端中尝试:

$ heroku labs:enable websockets

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2016-01-18
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多