ПРЕДУПРЕДИТЕ Ошибку TCPServer: Адрес уже в использовании - связывает (2) в серверах Heroku и linux EC2

[2013-01-29 09:17:50] INFO  WEBrick 1.3.1
[2013-01-29 09:17:50] INFO  ruby 1.8.7 (2012-10-12) [i386-linux]
[2013-01-29 09:17:50] WARN  TCPServer Error: Address already in use - bind(2)
[2013-01-29 09:17:50] INFO  WEBrick::HTTPServer#start: pid=4107 port=8080

Когда я петляю приложенный ниже в Linux, я описал ошибку. Я попробовал всю возможную команду и стратегии онлайн, чтобы слушать процессы (включая жулик) и убить их. Я сделал это в большом количестве портов. Никакая удача.

Как только я управляю сценарием в Операционной системе Mac OS, и это работает. Тем не менее, я должен установить его на сервере, и клиенты должны общаться с ним. Это происходит на каждом случае амазонки ec2 и на heroku. Я видел эту ошибку слишком много раз и провожу много часов, пытаясь зафиксировать ее. Я формировал группу безопасности ec2 случаев и все еще не работал. Я вне отчаянного. В этом пункте я должен думать, что проблема должна быть самим WEBrick или чем-то в моем коде.

    require 'webrick'
    require 'uri'
    require 'net/http'

    $own_address = 8080


    class AuctionInfo
        # The representation is a hash mapping item names to [highest_bidder, highest_bid, end_time]
        def initialize
            @data = {}
        end
        def new_item(item, endTime)
            @data[item] = ["UNKNOWN", 0, endTime]
        end
        def bid(item, bid, client)
            if @data.has_key?(item)
                endTime = @data[item][2]
                if @data[item][1].to_i < bid.to_i and Time.new.to_i < endTime.to_i
                    @data[item] = [client, bid, endTime]
                end
            end
        end
        def get_status(item)
            if @data.has_key?(item)
                return @data[item][0]
            end
        end
        def winner(item)
            if @data.has_key?(item)
                if @data[item][2].to_i + 1 <= Time.new.to_i
                    return @data[item][0]
                else return "UNKNOWN"
                end
            end
        end
        def reset
            @data = {}
        end
        def has_item(item)
            return @data.has_key?(item)
        end
        def get_data
            return {}.replace(@data) 
        end
    end

class StartAuctionServlet < WEBrick::HTTPServlet::AbstractServlet

    def initialize(server, data)
        @data = data
    end

    def do_POST(request, response)
        if request.query['name'] and request.query['end_time']
            @data.new_item(request.query['name'], request.query['end_time'].to_i)
        end
        response.status = 200
    end
    alias_method :do_GET, :do_POST
end

class BidServlet < WEBrick::HTTPServlet::AbstractServlet

    def initialize(server, data)
        @data = data
    end

    def do_POST(request, response)
        if request.query['name'] and request.query['client'] and request.query['bid']
            @data.bid(request.query['name'], request.query['bid'].to_i, request.query['client'])
        end
        response.status = 200
    end
    alias_method :do_GET, :do_POST
end

class StatusServlet < WEBrick::HTTPServlet::AbstractServlet

    def initialize(server, data)
        @data = data
    end

    def do_GET(request, response)

        if request.query['name']
            response.body = @data.get_status(request.query['name'])
        end
        response.status = 200
    end
    alias_method :do_POST, :do_GET
end

class WinnerServlet < WEBrick::HTTPServlet::AbstractServlet

    def initialize(server, data)
        @data = data
    end

    def do_GET(request, response)
        if request.query['name']
            response.body = @data.winner(request.query['name'])
        end
        response.status = 200
    end
    alias_method :do_POST, :do_GET
end

class ResetServlet < WEBrick::HTTPServlet::AbstractServlet

    def initialize(server, data)
        @data = data
    end
    def do_POST(request, response)
        @data.reset
        response.status = 200
    end
    alias_method :do_GET, :do_POST
end

class RandomServlet < WEBrick::HTTPServlet::AbstractServlet
    def initialize(server, data)
        @data = data
    end
    def do_GET(request, response)
        response.status = 200
        response.body = @data.get_data.to_s
    end
    alias_method :do_POST, :do_GET
end




data = AuctionInfo.new
server = WEBrick::HTTPServer.new(:Port => $own_address)
server.mount '/start_auction', StartAuctionServlet, data
server.mount '/bid', BidServlet, data
server.mount '/status', StatusServlet, data
server.mount '/winner', WinnerServlet, data
server.mount '/rst', ResetServlet, data
server.mount '/', RandomServlet, data
trap("INT") { server.shutdown }
server.start
0
nl ja de

1 ответы

Вы проверили, управляет ли сервер Linux апачем, котом, Тринидадом или каким-либо другим веб-сервером? Разногласия - один из них, уже работает на порте 8080 на сервере.

lsof - полезная команда. Попробуйте lsof | grep 8080 и видят, обнаруживается ли что-нибудь

2
добавлено
<кодовый> $ lsof-wni tcp:8080 может быть более полезным здесь, чтобы найти то, что использует тот порт.
добавлено автор Pippin, источник
Уже сделал. Ничто не обнаруживается...
добавлено автор pombo, источник
Linux Help
Linux Help
2 686 участник(ов)

Правила: https://telegra.ph/Pravila-Linux-Help-10-15

pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Linux Gaming RUS
Linux Gaming RUS
28 участник(ов)

Русскоязычный чатик, посвящённый играм на различных дистрибутивах Linux, а также wine, proton Arch Linux RU @ArchLinuxChatRU Gnome RU @gnome_ru