Ответ 1
Это означает, что порт уже используется.
Кроме того, попробуйте запустить его с правами администратора
sudo thin start -p 80
(Спасибо Тому Кринсону за его блог статью.)
Я изучаю тонкий сервер, теперь могу использовать 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>'
Это означает, что порт уже используется.
Кроме того, попробуйте запустить его с правами администратора
sudo thin start -p 80
(Спасибо Тому Кринсону за его блог статью.)
Похоже, что где-то висел старый рубиновый процесс.
Монитор активности запуска и уничтожьте все процессы Ruby.
Или используйте терминал:
ps -e | grep "ruby"
то
kill {process id}
rvmsudo rails server thin -p 80
Если вы не хотите запускать 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
Таким образом, вы можете запустить веб-сервер в качестве другого пользователя, который не имеет привилегий.
Традиционно порт 80 является привилегированным портом (на самом деле все из них ниже 1024), поэтому вам нужно иметь привилегии суперпользователя для привязки к нему.
Оглядываясь на документы, они предлагают запустив его за nginx
, что, как правило, хорошая идея. Предполагая, что вы использовали диспетчер пакетов для установки nginx
, вы, вероятно, получили инструкции о том, как сделать запуск nginx
при загрузке, и по умолчанию он будет привязан к порту 80.
Я не мог сделать Thin run на порту 80, используя sudo
, потому что я установил Ruby с помощью RVM, и у пользователя root не было доступа к нему. Кроме того, перед запуском Thin я должен был установить переменную окружения, чтобы установить URL-адрес доступа к mongodb. Следующая строка сделала это для меня:
rvmsudo MONGODB_URI=MY_MONGO_URI thin start -p 80 -d
проверить эту тему Параметры сервера 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>
Вы можете попробовать использовать порт 8080. Мы делаем это с нашими приложениями GWT, и это более удобно в любом случае, а не 3000.
Возможно, попробуйте "sudo bundle exec thin start -p 80"?