【问题标题】:Rails-tutorial Chapter 1: rails server isn't working on Cloud9Rails-tutorial Chapter 1: rails server is not working on Cloud9
【发布时间】:2014-10-30 21:51:43
【问题描述】:

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) for 0.0.0.0:8080 (Errno::EADDRINUSE)”暗示我已经有一个 Rails 服务器正在运行,但我没有。我不太确定在这里做什么,并且本教程没有建议任何解决此问题的方法。

【问题讨论】:

    标签: ruby-on-rails cloud9-ide


    【解决方案1】:

    我了解到您可以使用命令 killall ruby 来停止任何对我有帮助的 ruby​​ 进程,因为我在教程中错误地在 ~/workspace 级别运行了 rails server -b $IP -p $PORT 命令。我在can't open rails server找到了答案

    【讨论】:

    • 尝试运行 killall ruby​​,但找不到任何正在运行的进程。
    • 只是想说我第一次遇到这个确切的问题并且很高兴谷歌搜索错误消息导致了解决方案 - 对于我自己的该死的教程!签名,作者 :-)
    【解决方案2】:

    我最终再次从头开始学习本教程,它运行良好,但以后遇到此问题的任何人都可能会发现我从 cloud9 的支持团队收到的这种故障排除技术很有用:


    试试:

    lsof -i:8080
    

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

    如果是 apache,使用停止它:

    sudo /etc/init.d/apache2 stop
    

    希望这个答案对遇到这个问题的人有用。

    【讨论】:

      【解决方案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 分钟),您的操作系统可能会释放端口。如果不是,请在每次运行rails server 时使用超过 5,000 的随机端口号,例如

        $ rails server -b $IP -p 6789
        

        或者,因为你的 IDE 太糟糕了,你可能会考虑使用不同的 IDE。

        【讨论】:

        • "rails server -b $IP -p $PORT" 是我用来获取上述错误的命令。它包含在我的问题中
        • 而且使用 5000 以上的数字也无济于事。服务器启动,但我无法在浏览器中通过:rails-tutorial-c9-myname.c9.io 访问它,就像我应该能够
        • 你好像对Cloud9有偏见,你的cmet完全没用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2013-01-26
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多