Ruby 如何在默认端口上启动精简?

Ruby 如何在默认端口上启动精简?,ruby,thin,Ruby,Thin,我正在学习瘦服务器,现在我可以使用thin start启动服务器,但是端口是3000,我应该在浏览器中键入localhost:3000以获取网页 我想取消3000端口,因为我们通常与其他网站。因此,我将use命令thin-p80 start设置为使用默认http端口。但我有一个错误: root@makserver:~/apps/videosite# thin --port 80 start >> Using rack adapter >> Thin web server

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

我想取消3000端口,因为我们通常与其他网站。因此,我将use命令
thin-p80 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>'
root@makserver:~/apps/videosite#精简--端口80启动
>>使用机架适配器
>>瘦web服务器(v1.2.7代码名无Hup)
>>最大连接数设置为1024
>>收听0.0.0.0:80,CTRL+C停止
/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:在'start\u tcp\u server'中:没有接受程序(运行时错误)
from/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.10/lib/eventmachine.rb:572:in'start_server'
来自/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_命令'
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`'
from/usr/local/bin/thin:19:in'load'
from/usr/local/bin/thin:19:in`'

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

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

sudo thin start -p 80

(感谢Tom Crinson的博客。)

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


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

看起来旧的Ruby进程挂起了

rvmsudo rails server thin -p 80
启动活动监视器并杀死所有Ruby进程

或使用终端:

ps -e | grep "ruby"
然后:


如果您不想运行sudo来启动Web服务器(可能该用户不是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
查找iptable

sudo iptables --list -n -t nat
sudo iptables --list -n
这样,您可以作为另一个没有特权的用户运行Web服务器


您可以尝试使用8080端口。我们使用GWT应用程序来实现这一点,而且它比3000更方便。

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

rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
检查这个线程

不建议通过端口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>
LoadModule proxy\u modules/mod\u proxy.so
LoadModule proxy\u http\u module modules/mod\u proxy\u http.so
服务器名称您的服务器名称
文档根你的根
ProxyPass/http://YOURSITE.com:3000/
ProxyPassReverse/http://YOURSITE.com:3000/
代理主机

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

端口80上是否运行其他程序?我刚刚安装了nginx,但启动时出现了一些错误
[emerg]:bind()到0.0.0.0:80失败(98:地址已在使用)
顺便说一句,我的服务器正在运行VPS@yozloy正如@Semyon Pereplitsa所说,这意味着该端口上已经绑定了某些内容(最常见的是Apache)。要了解服务器上正在执行的操作,请尝试运行
lsof-i:80
(假设已安装
lsof
;如果未安装,请先执行)。假设它是Apache,并且您希望使用nginx,那么您可能应该卸载Apache,或者更改启动设置,使其在默认情况下不会启动(如何启动取决于您的操作系统)。Mokiato的回答应该对您有所帮助。“这表明端口可能已经在使用中。”-宾果。谢谢(似乎在构建精简版时,错误消息“端口正在使用”也在使用中。)在这里提供的所有解决方案中(谢谢大家),这是一个适合我的解决方案。谢谢你,路易斯!这也是一个针对各种端口限制的通用解决方案,这给了我相同的“/usr/bin/env:ruby:No-thin-directory”错误,如
sudo-thin-start-p 80
。运行rvmsudo有什么不同?这正是我所需要的,我喜欢命令行的答案。加号。
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>