Rails-tutorial Глава 1: сервер rails не работает в Cloud9

https://www.railstutorial.org/book/beginning#sec-rails_server

Я достиг этого шага и использую среду cloud9. Однако когда я запускаю сервер в соответствии с листингом 1.7 этого руководства, я получаю следующую ошибку:

myname@rails-tutorial:~/workspace/hello_app $ rails server -p $PORT -b $IP
=> Booting WEBrick
=> Rails 4.2.0.beta2 application starting in development on http://0.0.0.0:8080
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2014-10-30 21:44:22] INFO  WEBrick 1.3.1
[2014-10-30 21:44:22] INFO  ruby 2.1.1 (2014-02-24) [x86_64-linux]
Exiting /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `bind': Address already in use - bind(2) for 0.0.0.0:8080 (Errno::EADDRINUSE)
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:206:in `listen'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:461:in `block in tcp_server_sockets'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:232:in `each'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:232:in `foreach'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/socket.rb:459:in `tcp_server_sockets'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/utils.rb:75:in `create_listeners'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/server.rb:132:in `listen'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/server.rb:113:in `initialize'
    from /usr/local/rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/webrick/httpserver.rb:45:in `initialize'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:32:in `new'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:32:in `run'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/rack-1.6.0.beta/lib/rack/server.rb:288:in `start'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands/server.rb:80:in `start'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:80:in `block in server'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:75:in `tap'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:75:in `server'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/railties-4.2.0.beta2/lib/rails/commands.rb:17:in `<top (required)>'
    from /home/ubuntu/workspace/hello_app/bin/rails:8:in `require'
    from /home/ubuntu/workspace/hello_app/bin/rails:8:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `load'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `call'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/client.rb:26:in `run'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/bin/spring:48:in `<top (required)>'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load'
    from /usr/local/rvm/gems/ruby-2.1.1@rails4/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `<top (required)>'
    from /home/ubuntu/workspace/hello_app/bin/spring:16:in `require'
    from /home/ubuntu/workspace/hello_app/bin/spring:16:in `<top (required)>'
    from bin/rails:3:in `load'
    from bin/rails:3:in `<main>'

Я пытался указать другой порт, но это не работает, и среда cloud9 предлагает мне просто использовать переменную $PORT.

Ошибка «Адрес уже используется — bind(2) для 0.0.0.0:8080 (Errno::EADDRINUSE)» подразумевает, что у меня уже есть работающий сервер rails, но это не так. Я не совсем уверен, что здесь делать, и в учебнике не предлагается какой-либо метод устранения этой проблемы.


person Josh Burson    schedule 30.10.2014    source источник


Ответы (4)


Я узнал, что вы можете использовать команду killall ruby, чтобы остановить любой из процессов ruby, что помогло мне, потому что я по ошибке запустил команду rails server -b $IP -p $PORT на уровне ~/workspace в учебнике. Я нашел ответ в не могу открыть сервер rails

person Tommy    schedule 30.10.2014
comment
Пытался запустить killall ruby, но не смог найти ни одного запущенного процесса. - person Josh Burson; 31.10.2014
comment
Просто хотел сказать, что впервые столкнулся именно с этой проблемой и был рад, что поиск сообщения об ошибке в Google привел к решению — для моего собственного проклятого учебника! Подпись, автор :-) - person mhartl; 06.06.2016

В итоге я снова начал обучаться с нуля, и все работало нормально, но любой, кто столкнется с этой проблемой в будущем, может найти полезным этот метод устранения неполадок, который я получил от группы поддержки cloud9:


Пытаться:

lsof -i:8080

Это даст приложению, которое его занимает.

Если apache, остановите его, используя:

sudo /etc/init.d/apache2 stop

Надеюсь, этот ответ будет полезен всем, у кого есть эта проблема.

person Josh Burson    schedule 03.11.2014

Вероятно, у вас просто был запущен другой сервер. Тот, который вы инициировали ранее в учебнике с помощью команды rails server. Вам нужно сначала закрыть другой, используя Ctrl + C, а затем снова попробовать rails server -b $IP -p $PORT

person marfsco    schedule 09.07.2015

$ rails server -b $IP -p $PORT

Cloud9 использует специальные переменные среды $IP и $PORT для динамического назначения IP-адреса и номера порта. Если вы хотите увидеть значения этих переменных, введите echo $IP или echo $PORT в командной строке.

Вполне вероятно, что если вы подождете несколько минут (не более 2), ваша ОС освободит порт. Если нет, используйте случайный номер порта более 5000 каждый раз, когда вы запускаете rails server, например.

$ rails server -b $IP -p 6789

Или, поскольку ваша IDE такая отстойная, вы можете подумать об использовании другой IDE.

person 7stud    schedule 31.10.2014
comment
rails server -b $IP -p $PORT — это команда, которую я использовал, чтобы получить указанную выше ошибку. Это включено в мой вопрос - person Josh Burson; 31.10.2014
comment
И использование числа выше 5000 тоже не помогает. Сервер запускается, но я не могу получить к нему доступ в браузере через: rails-tutorial-c9- myname.c9.io , как будто я должен иметь возможность - person Josh Burson; 31.10.2014
comment
Похоже, вы предвзято относитесь к Cloud9, и ваши комментарии совершенно бесполезны. - person Josh Burson; 31.10.2014