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

mlz*_*boy 85 ruby-on-rails ruby-on-rails-3

默认情况下,

 rails s #running on 3000 port
Run Code Online (Sandbox Code Playgroud)

现在我想在端口80上运行它.所以我试过:

 sudo rails -s -p80
Run Code Online (Sandbox Code Playgroud)

但它引发了一个错误:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found
Run Code Online (Sandbox Code Playgroud)

我用rvm来安装ruby和rails.似乎rvm是用户指定的.它无法在root中找到rails吗?

我也试过下面的代码:

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
Run Code Online (Sandbox Code Playgroud)

iai*_*ain 208

rvmsudo rails server -p 80
Run Code Online (Sandbox Code Playgroud)

  • 在rvmsudo可用之前我必须更新rvm. (2认同)
  • 如果像我一样你使用的是rbenv而不是rvm,这个rbenv插件会做同样的事情:https://github.com/dcarley/rbenv-sudo (2认同)
  • @Kevin Chen:不在RVM中,但我担心以root身份运行Rails.在生产中,您将使用Apache或Nginx,它需要root权限来声明端口,但作为特殊用户运行.我的解决方案只是用于测试开发中的内容. (2认同)

Din*_*ini 22

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

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
Run Code Online (Sandbox Code Playgroud)

另一种选择是:

rvmsudo rails server -p 80
Run Code Online (Sandbox Code Playgroud)

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


cfe*_*uke 7

打算建议

rails=`which rails` ; sudo $rails server -p 80
Run Code Online (Sandbox Code Playgroud)

但仍然试图使用全球宝石,而不是从RVM项目宝石.所以...

  1. 确保sshd在Mac上运行.(System Prefs => Sharing =>远程登录选中)
  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下进行设置.除非你只是试图快速演示一些东西,当然这不是一个永久的解决方案.