Не удается привязать к порту 80, но запуск в текущей оболочке работает без каких-либо проблем
Я получаю следующую ошибку при попытке запустить " cap production unicorn:start
",
F, [2013-07-12T04:36:18.134045 #28998] FATAL -- : error adding listener addr=0.0.0.0:80
/home/ec2-user/apps/foo_prod/shared/bundle/ruby/2.0.0/gems/unicorn-4.6.3/lib/unicorn/socket_helper.rb:147:in 'initialize': Permission denied - bind(2) (Errno::EACCES)
Выполняя следующую команду вручную, работает без каких-либо проблем. Что может быть проблемой здесь?
rvmsudo unicorn_rails -c config/unicorn/production.rb -D --env production
Ответы
Ответ 1
Вам нужен root-доступ для привязки к более низким портам, таким как порт 80
. Команда rvmsudo
выполняется в корневом контексте, и поэтому она работает.
Задача Cap выполняется в обычном пользовательском контексте (возможно, развертывается) в зависимости от вашей конфигурации. Вы должны добавить способность sudo ограничить развертывание пользователя и убедиться, что ваша задача cap использует sudo
для запуска unicorn
.
Ответ 2
Ответ @Iuri G. дает вам разум и возможное решение.
У меня есть другое предложение, если у вас нет чрезвычайно веских оснований для запуска Unicorn с портом 80, измените его на более высокий порт (> 1024), например 3000. Это решит вашу проблему.
Если это приложение, которое открыто для публики, слишком просто подавить Unicorn и сделать ваше приложение недоступным для конечных пользователей. В таком случае поставите Единорог за прокси (например, Nginx). Прокси-сервер будет находиться на порту 80 и Unicorn на более высоком порту.
Ответ 3
В моей среде разработки, используя RubyMine, я столкнулся с этим в последнее время.
Я использовал SSH для перенаправления портов 80 на 8080.
sudo ssh -t -L 80:127.0.0.1:8080 [email protected]
Ответ 4
Я предполагаю, что вы используете Ubuntu в качестве производственного сервера. На вашем сервере вам нужно отредактировать файл sudoers
:
Первый тип select-editor
и выберите nano (или другой редактор, с которым вы чувствуете себя комфортно)
Затем в нижней части файла перед линией include
добавьте следующую строку:
%deployer ALL=(ALL)NOPASSWD:/path/to/your/unicorn_rails
Вам нужно заменить deployer
именем пользователя, которое вы используете с capistrano, и заменить /path/to/your/unicorn_rails
своим правильным путем. Это позволит вашему пользователю развертывателя "sudo unicorn_rails" без запроса пароля.
Наконец, отредактируйте своего unicorn:start
задачу capistrano и добавьте rvmsudo
перед вашей командной строкой, которая начнет единорог:
rvmsudo unicorn_rails -c config/unicorn/production.rb -D --env production
Если он не работает, вы можете попробовать это вместо этого
bundle exec sudo unicorn_rails -c config/unicorn/production.rb -D --env production