Як запустити рейки 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

@pinouchon це працює, тому що rvmsudoробить sudo плюс завантаження rvm як sudo.
Iain

2
Якщо, як і я, ви використовуєте rbenv, а не rvm, цей плагін rbenv зробить еквівалент: github.com/dcarley/rbenv-sudo
micapam

Чи це було б більшим ризиком, якщо в RVM є діра в безпеці, враховуючи, що вона працює як root?
Kevin Chen

2
@Kevin Chen: Не в RVM, але я був би стурбований запуском Rails як root. У виробництві ви б використовували Apache або Nginx, яким потрібні дозволи root, щоб заявити порт, але працює як спеціальний користувач. Моє рішення призначене лише для тестування речей у розробці.
iain

Я втомився від цього, але отримав socket.rb:206:in прив'язку ': Адреса вже використовується - bind (2) для 0.0.0.0:80 (Errno :: EADDRINUSE) `помилка
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 може мати проблеми із безпекою чи ні?


Це поглине два порти, і це не дозволить запустити інший екземпляр рубіну на порту 3000.
Костянтин

Як це змінити? Для мене це чудово працює, що чудово, але що, якщо я хочу скасувати переспрямування? Дякую.
robins35

потрібно скинути таблицю IP-маршрутів за замовчуванням
Dinesh Saini

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 .
bentrevor

8

Збирався запропонувати

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

але це все ще намагається використовувати глобальний gemset, а не проектний gemset від RVM. Тому...

  1. Переконайтеся, що sshd працює на вашому Mac. (Системні преф. => Спільний доступ => Віддалений вхід перевірено)
  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. Якщо ви просто не намагаєтесь швидко щось демонструвати, і це, звичайно, не постійне рішення.


переконайтеся, що ви використовуєте /usr/bin/which railsна випадок, коли рейки є псевдонімами
david_adler

1

Якщо ви використовуєте RVM, і ви налаштували за замовчуванням, тоді вам не слід користуватися sudo.

Просто:

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

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


root потрібен для привілейованих портів.
cfeduke

@cfeduke - О! Ви маєте рацію.
Swanand

@marimaf - Документація дозріла з часом. Ось нове посилання: rvm.io/rvm/install
Swanand

Дякую, це допомагає отримати доступ до віртуальної машини MAC з ПК, щоб перевірити програму для рейок, над якою я працював. У цьому випадку, хоча мені довелося використовувати опцію -b (bind) з ip-адресою vm.
Tom T

-1

Ви можете запустити сервер через порт 80

rails s -p 80

Якщо порт 80 не прив’язується (інші процеси не використовують порт 80).


1
Порт нижче 1024 потребує кореневого доступу, і ви не можете запускати програму, поки не налаштуєте рейки через кореневу URL-адресу. Я реалізував і протестував це.
Dinesh Saini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.