web-dev-qa-db-ja.com

デフォルトのポートでシンを開始するにはどうすればよいですか?

シンサーバーを学習しています。今ではthin startを使用してサーバーを起動できますが、ポートは3000です。ブラウザーにlocalhost:3000と入力して、Webページを取得する必要があります。

他のサイトと同じように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>'
19
mko

これは、ポートがすでに使用されている可能性があることを示しています。

また、管理者権限で実行してみてください

Sudo thin start -p 80

(Tom Crinsonのブログに感謝します 記事 。)

25

古いRubyプロセスがどこかにハングしているようです。

アクティビティモニターを起動し、すべてのRubyプロセスを強制終了します。

または、ターミナルを使用します。

ps -e | grep "Ruby"

その後:

kill {process id}
24
Stefan Fountain
rvmsudo Rails server thin -p 80
20
zishe

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

Iptablesを検索するには

Sudo iptables --list -n -t nat
Sudo iptables --list -n

このようにして、特権を持たない別のユーザーとしてWebサーバーを実行できます。

クレジットはこの投稿に移動します

12
Louis Sayers

従来、ポート80は特権ポートであるため(実際には、1024未満のポートはすべて特権ポートです)、それにバインドするにはスーパーユーザー特権が必要です。

ドキュメントを見ると、 彼らは提案していますnginxの後ろで実行します。これは、一般的には良い考えです。パッケージマネージャーを使用してnginxをインストールしたとすると、起動時にnginxを起動する方法についての説明が表示され、デフォルトでポート80にバインドされます。

5
Hank Gay

RVMを使用してRuby)をインストールし、rootユーザーがアクセスできなかったため、Sudoを使用してポート80でThinを実行できませんでした。 Thinを実行する前に環境変数を設定してmongodbアクセスURLを設定します。次の行でそれを実行しました。

rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
1
Vineel Shah

このスレッドをチェックしてください Ruby on Railsサーバーオプション

'thin'をポート80を介してインターネットに直接公開することはお勧めしません。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>
1
David Zhan Liu