如何在默认端口上启动瘦身?

时间:2011-02-24 03:47:53

标签: ruby thin

我正在学习瘦服务器,现在我可以使用thin start启动服务器,但端口是3000,我应该在浏览器中输入localhost:3000来获取网页。

我想像其他网站一样取消3000端口。所以我设置使用命令thin -p 80 start来使用默认的http端口。但我得到了这个错误:

root@makserver:~/apps/videosite# thin --port 80 start
>> Using rack adapter
>> Thin web server (v1.2.7 codename No Hup)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:80, CTRL+C to stop
/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_tcp_server': no acceptor (RuntimeError)
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in `start_server'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/tcp_server.rb:16:in `connect'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:49:in `block in start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
    from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/backends/base.rb:57:in `start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/server.rb:156:in `start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/controllers/controller.rb:80:in `start'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!'
    from /usr/local/lib/ruby/gems/1.9.1/gems/thin-1.2.7/bin/thin:6:in `<top (required)>'
    from /usr/local/bin/thin:19:in `load'
    from /usr/local/bin/thin:19:in `<main>'

9 个答案:

答案 0 :(得分:25)

这表示端口可能已在使用中。

另外,尝试使用管理员权限运行

sudo thin start -p 80

(感谢Tom Crinson的博客article。)

答案 1 :(得分:24)

看起来旧的Ruby进程已经挂起了某个地方。

启动活动监视器并终止所有Ruby进程。

或使用终端:

ps -e | grep "ruby"

然后:

kill {process id}

答案 2 :(得分:20)

rvmsudo rails server thin -p 80

答案 3 :(得分:12)

如果您不想运行sudo来启动Web服务器(可能用户不是sudoer),您可以始终以超级用户身份进入,并将端口80流量的重定向设置为端口x:< / p>

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
sudo iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 3000

查找iptables

sudo iptables --list -n -t nat
sudo iptables --list -n

这样,您可以将网络服务器作为另一个不具有特权的用户运行。

Credit goes to this post

答案 4 :(得分:5)

传统上,端口80是一个特权端口(实际上它们都低于1024)所以你需要拥有超级用户权限才能绑定它。

查看文档,they suggestnginx后面运行它,这通常是一个好主意。假设您使用了包管理器来安装nginx,您可能会收到有关如何在启动时启动nginx的说明,默认情况下它将绑定到端口80。

答案 5 :(得分:1)

我无法使用sudo在端口80上运行Thin运行,因为我使用RVM安装了Ruby,而root用户无法访问它。另外,我必须在运行Thin之前设置一个环境变量来设置我的mongodb访问URL。以下一行是为我做的:

rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d

答案 6 :(得分:1)

看看这个帖子 Ruby on Rails Server options

不建议通过端口80将“thin”直接暴露给互联网。您应该使用Apache作为Web服务器并将http请求重定向到瘦应用程序服务器。您可以将其添加到httpd.conf以将流量重定向到rails

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80>
    ServerName YOUR SERVER NAME
    DocumentRoot YOUR ROOT
    ProxyPass / http://YOURSITE.com:3000/
    ProxyPassReverse / http://YOURSITE.com:3000/
    ProxyPreserveHost On
</VirtualHost>

答案 7 :(得分:-1)

您可以尝试使用8080端口。我们使用我们的GWT应用程序,无论如何它更方便,而不是3000。

答案 8 :(得分:-1)

也许尝试“sudo bundle exec thin start -p 80”?