Rails-учебник Глава 1: сервер rails не работает над Cloud9

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

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

[email protected]:~/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/[email protected]/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:32:in `new'
    from /usr/local/rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/handler/webrick.rb:32:in `run'
    from /usr/local/rvm/gems/[email protected]/gems/rack-1.6.0.beta/lib/rack/server.rb:288:in `start'
    from /usr/local/rvm/gems/[email protected]/gems/railties-4.2.0.beta2/lib/rails/commands/server.rb:80:in `start'
    from /usr/local/rvm/gems/[email protected]/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:80:in `block in server'
    from /usr/local/rvm/gems/[email protected]/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:75:in `tap'
    from /usr/local/rvm/gems/[email protected]/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:75:in `server'
    from /usr/local/rvm/gems/[email protected]/gems/railties-4.2.0.beta2/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /usr/local/rvm/gems/[email protected]/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/[email protected]/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `load'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in `call'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/client/command.rb:7:in `call'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/client.rb:26:in `run'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/bin/spring:48:in `<top (required)>'
    from /usr/local/rvm/gems/[email protected]/gems/spring-1.1.3/lib/spring/binstub.rb:11:in `load'
    from /usr/local/rvm/gems/[email protected]/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, но я этого не делаю. Я не совсем уверен, что делать здесь, и в учебнике не предлагается какой-либо метод устранения этой проблемы.

Ответ 1

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


Try:

lsof -i:8080

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

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

sudo /etc/init.d/apache2 stop

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

Ответ 2

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

Ответ 3

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

Ответ 4

$ 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.