Ruby on Rails 3无法在生产模式下打开端口

时间:2011-02-26 12:54:40

标签: ruby-on-rails-3 passenger websocket

我有服务器(WHM,ruby 1.9.2,Rails 3.0.3,centOS,乘客),我只是部署我的RoR应用程序(它适用于本地计算机),但我在生产模式下会出现奇怪的行为。

我正在使用

中的web_socket.rb文件
  

http://gimite.net/en/

当我想用:

启动Web套接字服务器时
Thread.start {  
 @sockets = []
      Thread.abort_on_exception = true
      server = WebSocketServer.new( :accepted_domains => "*", :port => session[:port])
      logger.debug "Server is running at port %d" % server.port   



  server.run() do |ws|


    puts("Connection accepted")
    puts("Path: #{ws.path}, Origin: #{ws.origin}")

    if ws.path == "/"
      ws.handshake()
      @sockets << ws
      while data = ws.receive()

        printf("Received: %p\n", data)

          @sockets.each {|s| s.send(data)}

        printf("Sent: %p\n", data)
      end
    else
      ws.handshake("404 Not Found")
    end
    puts("Connection closed")
  end
  }
end

我没有得到新的Thread运行。当我没有“Thread.start”开始时,我收到了这个错误:

Errno::EAFNOSUPPORT (Address family not supported by protocol - socket(2)):
  lib/web_socket.rb:314:in `initialize'
  lib/web_socket.rb:314:in `open'
  lib/web_socket.rb:314:in `initialize'
  app/controllers/access_controller.rb:53:in `new'
  app/controllers/access_controller.rb:53:in `socket'
  app/controllers/access_controller.rb:29:in `attempt_login'

我试图弄清楚问题是什么,但我卡住了:|

我怎么知道端口可能有问题?

因为在web_socket.rb中,第314行是:

if params[:host]
        @tcp_server = TCPServer.open(params[:host], @port)
      else
        @tcp_server = TCPServer.open(@port)
      end

2 个答案:

答案 0 :(得分:0)

我必须使用后台进程而不是Threads

答案 1 :(得分:0)

可能是您的服务器具有针对localhost的IPV6

/ etc / hosts中的用户127.0.0.1

它解决了我的问题