Rails教程第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 `' from /home/ubuntu/workspace/hello_app/bin/rails:8:in `require' from /home/ubuntu/workspace/hello_app/bin/rails:8:in `' 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 `' 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 `' from /home/ubuntu/workspace/hello_app/bin/spring:16:in `require' from /home/ubuntu/workspace/hello_app/bin/spring:16:in `' from bin/rails:3:in `load' from bin/rails:3:in `' 

我已经尝试指定一个不同的端口,但这不起作用,cloud9环境告诉我,我应该只使用$ PORT变量。

错误“地址已在使用 – bind(2)for 0.0.0.0:8080(Errno :: EADDRINUSE)”意味着我已经运行了一个rails服务器,但我没有。 我不确定该怎么做,本教程没有提出任何解决此问题的方法。

我了解到你可以使用命令killall ruby来阻止任何帮助我的ruby进程,因为我错误地在教程中的~/workspace级别运行了rails server -b $IP -p $PORT命令。 我发现答案中无法打开rails服务器

我最后再次从头开始教程并且工作正常,但是将来遇到此问题的任何人都可能会发现我从cloud9的支持团队收到的这种故障排除技术非常有用:


尝试:

 lsof -i:8080 

这将给予占用它的应用程序。

如果是apache,请使用以下命令停止:

 sudo /etc/init.d/apache2 stop 

希望这个答案对任何有此问题的人都有用。

可能你只是让其他服务器仍在运行。 您在之前使用rails server命令教程中启动的那个。 您需要先使用Ctrl + C关闭另一个,然后再次尝试rails server -b $IP -p $PORT

 $ rails server -b $IP -p $PORT 

Cloud9使用特殊环境变量$ IP和$ PORT动态分配IP地址和端口号。 如果要查看这些变量的值,请在命令行键入echo $ IP或echo $ PORT。

如果等待几分钟(不超过2分钟),您的操作系统可能会释放端口。 如果没有,每次运行rails server时使用超过5,000的随机端口号,例如

 $ rails server -b $IP -p 6789 

或者,因为您的IDE非常糟糕,您可以考虑使用其他IDE。