Подтвердить что ты не робот

Как начать работу с портом по умолчанию?

Я изучаю тонкий сервер, теперь могу использовать thin start для запуска сервера, но для порта 3000, я должен ввести localhost: 3000 в браузере, чтобы получить веб-страницу.

Я хочу снять порт 3000, как обычно, с другим сайтом. Поэтому я использовал команду thin -p 80 start, чтобы использовать порт http по умолчанию. Но я получил эту ошибку:

[email protected]:~/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>'
4b9b3361

Ответ 1

Это означает, что порт уже используется.

Кроме того, попробуйте запустить его с правами администратора

sudo thin start -p 80

(Спасибо Тому Кринсону за его блог статью.)

Ответ 2

Похоже, что где-то висел старый рубиновый процесс.

Монитор активности запуска и уничтожьте все процессы Ruby.

Или используйте терминал:

ps -e | grep "ruby"

то

kill {process id}

Ответ 3

rvmsudo rails server thin -p 80

Ответ 4

Если вы не хотите запускать sudo для запуска веб-сервера (возможно, пользователь не является 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

Таким образом, вы можете запустить веб-сервер в качестве другого пользователя, который не имеет привилегий.

Кредит отправляется на этот пост

Ответ 5

Традиционно порт 80 является привилегированным портом (на самом деле все из них ниже 1024), поэтому вам нужно иметь привилегии суперпользователя для привязки к нему.

Оглядываясь на документы, они предлагают запустив его за nginx, что, как правило, хорошая идея. Предполагая, что вы использовали диспетчер пакетов для установки nginx, вы, вероятно, получили инструкции о том, как сделать запуск nginx при загрузке, и по умолчанию он будет привязан к порту 80.

Ответ 6

Я не мог сделать Thin run на порту 80, используя sudo, потому что я установил Ruby с помощью RVM, и у пользователя root не было доступа к нему. Кроме того, перед запуском Thin я должен был установить переменную окружения, чтобы установить URL-адрес доступа к mongodb. Следующая строка сделала это для меня:

rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d

Ответ 7

проверить эту тему Параметры сервера Ruby on Rails

не рекомендуется открывать "тонкий" непосредственно в Интернет через порт 80. Вы должны использовать Apache в качестве веб-сервера и перенаправить HTTP-запрос на тонкий сервер приложений. вы можете добавить это в свой httpd.conf, чтобы перенаправить трафик на рельсы.

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>

Ответ 8

Вы можете попробовать использовать порт 8080. Мы делаем это с нашими приложениями GWT, и это более удобно в любом случае, а не 3000.

Ответ 9

Возможно, попробуйте "sudo bundle exec thin start -p 80"?