Как запустить rails s -p80 на 80 порте?

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
iain
источник
@pinouchon это работает, потому rvmsudoчто sudo плюс загрузка rvm как sudo.
iain
2
Если вы, как и я, используете rbenv, а не rvm, этот плагин rbenv будет делать то же самое: github.com/dcarley/rbenv-sudo
micapam
Будет ли это большим риском, если в RVM есть дыра в безопасности, учитывая, что он работает от имени пользователя root?
Кевин Чен
2
@Kevin Chen: Не в RVM, но я бы побеспокоился о том, чтобы запускать Rails как root. В производственной среде вы должны использовать Apache или Nginx, которым требуются права root для запроса порта, но который работает как специальный пользователь. Мое решение предназначено только для тестирования вещей в разработке.
iain 04
Я устал от этого, но получаю socket.rb:206:in привязку ': Адрес уже используется - bind (2) для 0.0.0.0:80 (Errno :: EADDRINUSE) `error
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 или других служб, которые обычно используют этот порт. Кроме того, я не уверен, что предоставление разрешения sudo для RVM может иметь какие-либо проблемы с безопасностью или нет?

Динеш Шайни
источник
Это займет два порта, и это не позволит запустить другой экземпляр ruby ​​на порту 3000.
Константин
Как это изменить? У меня он отлично работает, и это здорово, но что, если я хочу отменить перенаправление? Спасибо.
robins35
необходимо сбросить таблицу IP-маршрутов по умолчанию
Динеш Сайни
1
Вы можете изменить эту команду, заменив -Iс -D, так sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Ответы здесь более подробно: serverfault.com/questions/159544/undoing-port-forwarding .
бентревор
8

Собирался предложить

rails=`which rails` ; sudo $rails server -p 80

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

  1. Убедитесь, что на вашем Mac запущен sshd. (Системные настройки => Общий доступ => Удаленный вход отмечен)
  2. Убедитесь, что rails sвы используете порт 3000 как пользователь без полномочий root.
  3. Откройте новый терминал и ...

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

(Кстати, уменьшите дубликаты до единичных в строке выше, я не могу понять, как правильно избежать этого здесь.)

Первый Password:- ваш rootпользователь, второй - пароль для всех, кто whoamiвернется.

Хотя вы, вероятно, захотите установить Phusion Passenger и настроить его под локальным Apache. Если вы просто не пытаетесь продемонстрировать что-то очень быстро, и это, конечно, не постоянное решение.

cfeduke
источник
убедитесь, что вы используете, /usr/bin/which railsесли рельсы имеют псевдоним
david_adler
1

Если вы используете RVM, и вы выполнили настройку по умолчанию, вам не следует использовать sudo .

Только:

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

Однако 80 - это привилегированный порт, поэтому вам нужно запустить его как root, и вы должны будете следовать инструкциям по многопользовательской установке RVM.

Swanand
источник
root требуется для привилегированных портов.
cfeduke
@cfeduke - Ой! Вы правы.
Swanand
@marimaf - Со временем документация совершенствовалась. Вот новая ссылка: rvm.io/rvm/install
Swanand
Спасибо, это помогает получить доступ к виртуальной машине MAC с хоста ПК для тестирования приложения rails, над которым я работал. В этом случае, хотя мне пришлось использовать параметр -b (привязать) с IP-адресом виртуальной машины.
Tom T
-1

вы можете запустить сервер на порту 80

rails s -p 80

Если порт 80 не привязан (другие процессы не используют порт 80).

Ума
источник
1
Порт ниже 1024 требует корневого доступа, и вы не можете запускать приложение, пока не настроите рельсы через корневой URL. Реализовал и тестирую.
Динеш Сайни