【问题标题】:Ruby on Rails 3 can't open port in production modeRuby on Rails 3 无法在生产模式下打开端口
【发布时间】:2011-02-26 12:54:39
【问题描述】:

我有服务器(WHM、ruby 1.9.2、Rails 3.0.3、centOS、passenger),我只是部署了我的 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.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

【问题讨论】:

  • 我尝试关闭服务器上的防火墙,但没有成功。

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


【解决方案1】:

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

【讨论】:

  • 你能扩展这个答案吗?我也遇到了同样的问题
【解决方案2】:

可能是您的服务器有本地主机的 IPV6

/etc/hosts 中的用户 127.0.0.1

解决了我的问题

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多