如何在80端口上运行rails s -p80?


87

默认,

 rails s #running on 3000 port

现在,我想在端口80上运行它。

 sudo rails -s -p80

但这引发了错误:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found

我用rvm安装了ruby和rails。似乎rvm是用户指定的。难道根本找不到根?

我也尝试下面的代码:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ which rails
/home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails
mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/bin/rails s -p80

Answers:


212
rvmsudo rails server -p 80

@pinouchon它起作用,因为rvmsudosudo确实将rvm加载为sudo。
iain 2013年

2
如果像我一样,您使用的是rbenv而不是rvm,则此rbenv插件将等效:github.com/dcarley/rbenv-sudo
micapam 2013年

如果RVM以root身份运行,那么如果RVM中存在安全漏洞,这会带来更大的风险吗?
凯文·陈

2
@Kevin Chen:不在RVM中,但是我会担心以root身份运行Rails。在生产中,您将使用Apache或Nginx,它们需要root权限才能声明该端口,但必须以特殊用户身份运行。我的解决方案仅用于测试开发中的内容。
iain

我厌倦了这个,但得到的socket.rb:206:in 绑定':地址已在使用-绑定(2)0.0.0.0:80(错误:: EADDRINUSE)`错误
R15

23

只需使用以下命令将请求从端口80转发到3000:

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

另一个选择是:

rvmsudo rails server -p 80

但是,请记住从Apache或其他通常使用此端口的服务中释放此端口。另外,我不确定向RVM授予sudo权限是否可能存在任何安全问题?


这将占用两个端口,并且将不允许在端口3000上运行另一个ruby实例。–
Konstantin

您如何扭转这种情况?它非常适合我,这很好,但是如果我想撤消重定向怎么办?谢谢。
robins35

需要将IP路由表重置为默认值
Dinesh Saini

1
您可以通过更换扭转这一命令-I-D,所以sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000。这里的答案会更详细:serverfault.com/questions/159544/undoing-port-forwarding
bentrevor

8

会建议

rails=`which rails` ; sudo $rails server -p 80

但这仍然尝试使用全局gemset,而不是RVM中的项目gemset。所以...

  1. 确保sshd在Mac上运行。(系统偏好=>共享=>远程登录已选中)
  2. 确保rails s以非root用户身份在端口3000上运行
  3. 打开一个新终端,然后...

    me=``whoami``; sudo ssh -L 80:127.0.0.1:3000 -l $me -N localhost

(顺便说一句,在上面的行中将重复的`减少为单数,我无法弄清楚如何在此处正确地对其进行转义。)

第一个Password:是您的root用户,第二个是您whoami返回的密码。

尽管您可能想安装Phusion Passenger并在本地Apache下进行设置。除非您只是想快速演示一些真实的东西,否则这不是永久解决方案。


确保您使用/usr/bin/which rails的情况下是

1

如果您使用的是RVM,并且进行了默认设置,则不应使用sudo

只是:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ rails server -p 80

但是80是特权端口,因此您需要以root用户身份运行,并且将按照RVM的多用户安装说明进行操作


特权端口需要root用户。
cfeduke 2010年

@cfeduke-哦!你是对的。
斯旺德2010年

@marimaf-该文档已逐渐成熟。这是新的链接:rvm.io/rvm/install
Swanand 2012年

谢谢,这有助于从PC主机访问MAC VM以测试我正在处理的Rails应用程序。在那种情况下,尽管我确实必须将-b(绑定)选项与虚拟机的IP地址一起使用。
汤姆T

-1

您可以在端口80上启动服务器

rails s -p 80

如果端口80未绑定(其他进程未使用端口80)。


1
低于1024的端口需要root访问权限,并且直到没有通过root URL设置rails才能运行应用程序。我已经实施并测试了它。
Dinesh Saini 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.