21

我正在学习瘦服务器,现在我可以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>'
4

9 回答 9

25

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

另外,尝试以管理员权限运行它

sudo thin start -p 80

(感谢 Tom Crinson 的博客文章。)

于 2011-02-24T03:55:10.733 回答
24

看起来一个旧的 Ruby 进程挂在某个地方。

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

或者使用终端:

ps -e | grep "ruby"

然后:

kill {process id}
于 2012-04-15T17:06:02.290 回答
20
rvmsudo rails server thin -p 80
于 2012-04-01T08:20:25.370 回答
12

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

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

这样,您可以以另一个没有特权的用户身份运行网络服务器。

归功于这篇文章

于 2012-04-28T21:12:38.010 回答
5

传统上,端口 80 是一个特权端口(实际上所有低于 1024 的端口都是),因此您需要具有超级用户权限才能绑定到它。

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

于 2011-02-24T03:55:34.370 回答
1

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

rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
于 2012-09-16T01:40:04.833 回答
1

查看此线程 Ruby on Rails 服务器选项

不建议通过端口 80 直接向 Internet 公开“瘦”。您应该使用 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>
于 2013-07-14T08:52:07.240 回答
-1

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

于 2012-09-15T15:43:01.927 回答
-1

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

于 2014-02-28T19:49:06.667 回答