80ポートでrails-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

回答:


212
rvmsudo rails server -p 80

@pinouchonrvmsudoは、sudoとrvmをsudoとしてロードするために機能します。
iain 2013年

2
私のようにrvmではなくrbenvを使用している場合、このrbenvプラグインは同等の処理を実行します:github.com/dcarley/rbenv-sudo
micapam

RVMがrootとして実行されている場合、RVMにセキュリティホールがある場合、これはよりリスクが高くなりますか?
ケビンチェン

2
@Kevin Chen:RVMにはありませんが、Railsをrootとして実行することを心配しています。本番環境では、ApacheまたはNginxを使用します。これらは、ポートを要求するためにroot権限が必要ですが、特別なユーザーとして実行されます。私の解決策は、開発中のものをテストすることだけです。
iain 2013年

私はこれに疲れましたが、socket.rb:206:in バインドを取得しています':アドレスはすでに使用されています-bind(2)for 0.0.0.0:80(Errno :: 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権限を与えると、セキュリティ上の問題があるかどうかわかりませんか?


これにより2つのポートが消費され、ポート3000で別のrubyインスタンスを実行できなくなります。–
Konstantin

これをどのように逆転させますか?それは私にとって完璧に機能します、それは素晴らしいです、しかし私がリダイレクトを元に戻したい場合はどうなりますか?ありがとう。
robins35 2017年

IPルートテーブルをデフォルトにリセットする必要があります
Dinesh Saini 2017年

1
、soに置き換えること-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

ただし、RVMのプロジェクトgemsetではなく、グローバルgemsetを使用しようとします。そう...

  1. Macでsshdが実行されていることを確認してください。(システム設定=>共有=>リモートログインチェック済み)
  2. rails sroot以外のユーザーとしてポート3000で実行されていることを確認してください
  3. 新しいターミナルを開いて...

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

(BTWは、上記の行で重複する `を単一のものに減らします。ここでは、それを適切にエスケープする方法がわかりません。)

1つ目Password:rootユーザーで、2つ目はwhoami戻ってきた人のパスワードです。

おそらくPhusionPassengerをインストールして、ローカルのApacheの下にセットアップすることをお勧めします。何かを本当にすばやくデモしようとしているだけで、これが永続的な解決策ではない場合を除きます。


/usr/bin/which railsレールがエイリアス化されている場合は必ず使用してください
david_adler 2015

1

RVMを使用していて、デフォルトのセットアップを行った場合は、を使用しないでくださいsudo

ただ:

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

ただし、80は特権ポートであるため、rootとして実行する必要があり、RVMのマルチユーザーインストールの手順に従う必要があります。


特権ポートにはrootが必要です。
cfeduke 2010

@ cfeduke-ああ!その通りその通り。
スワナンド2010

@ marimaf-ドキュメントは時間の経過とともに成熟してきました。新しいリンクは次のとおり
rvm

ありがとうございます。これは、PCホストからMAC VMにアクセスして、作業中のRailsアプリをテストするのに役立ちます。その場合、私はvmのIPアドレスで-b(バインド)オプションを使用する必要がありましたが。
トムT

-1

ポート80でサーバーを起動できます

rails s -p 80

ポート80がバインドされていない場合(他のプロセスがポート80を使用していない)。


1
1024未満のポートにはルートアクセスが必要であり、ルートURLを介してレールを設定しない限りアプリケーションを実行できません。私はそれを実装してテストしました。
Dinesh Saini 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.