Bagaimana cara menjalankan rails s -p80 pada 80 port?

88

Secara default,

 rails s #running on 3000 port

Sekarang saya ingin menjalankannya di port 80. Jadi saya mencoba:

 sudo rails -s -p80

Tapi itu membuat kesalahan:

mlzboy@mlzboy-MacBook ~/my/b2c2 $ sudo rails s -p80
sudo: rails: command not found

Saya menggunakan rvm untuk menginstal ruby ​​& rails. Sepertinya rvm ditentukan pengguna. Apakah tidak dapat menemukan rel di root?

Saya juga mencoba kode di bawah ini:

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
mlzboy
sumber

Jawaban:

212
rvmsudo rails server -p 80
iain
sumber
@pinouchon berfungsi karena rvmsudosudo ditambah memuat rvm sebagai sudo.
iain
2
Jika seperti saya, Anda menggunakan rbenv daripada rvm, plugin rbenv ini akan melakukan hal yang sama: github.com/dcarley/rbenv-sudo
micapam
Apakah ini lebih berisiko jika ada lubang keamanan di RVM, mengingat itu berjalan sebagai root?
Kevin Chen
2
@Kevin Chen: Tidak di RVM, tapi saya khawatir tentang menjalankan Rails sebagai root. Dalam produksi, Anda akan menggunakan Apache atau Nginx, yang memerlukan izin root untuk mengklaim porta, tetapi dijalankan sebagai pengguna khusus. Solusi saya hanya untuk menguji berbagai hal dalam pengembangan.
iain
Saya lelah ini tetapi mendapatkan socket.rb:206:in bind ': Alamat sudah digunakan - bind (2) untuk 0.0.0.0:80 (Errno :: EADDRINUSE) `error
r15
23

Cukup teruskan permintaan dari port 80 ke 3000 menggunakan perintah di bawah ini:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000

Pilihan lainnya adalah:

rvmsudo rails server -p 80

Namun harap diingat untuk membebaskan port ini dari Apache atau layanan lain yang menggunakan port ini secara normal. Juga, saya tidak yakin memberikan izin sudo ke RVM mungkin memiliki masalah keamanan atau tidak?

Dinesh Saini
sumber
Ini akan menggunakan dua port, dan tidak akan memungkinkan untuk menjalankan instance ruby ​​lain pada port 3000.
Konstantin
Bagaimana Anda membalikkan ini? Ini berfungsi dengan sempurna untuk saya, dan itu bagus, tetapi bagaimana jika saya ingin membatalkan pengalihan? Terima kasih.
robins35
perlu mengatur ulang tabel rute IP ke default
Dinesh Saini
1
Anda dapat membalikkan perintah ini dengan mengganti -Idengan -D, jadi sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000. Jawabannya di sini lebih detail: serverfault.com/questions/159544/undoing-port-forwarding .
bentrevor
8

Akan menyarankan

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

tapi itu masih mencoba menggunakan gemet global dan bukan proyek gemet dari RVM. Begitu...

  1. Pastikan sshd berjalan di Mac Anda. (System Prefs => Sharing => Remote Login dicentang)
  2. Pastikan rails sberjalan pada port 3000 sebagai pengguna non-root Anda
  3. Buka terminal baru dan ...

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

(BTW kurangi duplikat `` menjadi tunggal di baris di atas, saya tidak tahu bagaimana melarikan diri dengan benar di sini.)

Yang pertama Password:adalah rootpengguna Anda , yang kedua adalah kata sandi untuk siapa pun yang whoamikembali.

Meskipun Anda mungkin ingin menginstal Phusion Passenger dan mengaturnya di bawah Apache lokal Anda. Kecuali jika Anda hanya mencoba mendemonstrasikan sesuatu dengan sangat cepat dan ini tentu saja bukan solusi permanen.

cfeduke
sumber
pastikan Anda menggunakan /usr/bin/which railscase rails dengan alias
david_adler
1

Jika Anda menggunakan RVM, dan Anda melakukan pengaturan default, maka Anda tidak boleh menggunakan sudo.

Hanya:

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

Namun 80 adalah port yang diistimewakan, jadi Anda perlu menjalankan sebagai root, dan Anda harus mengikuti petunjuk untuk instalasi RVM Multi-Pengguna .

Swanand
sumber
root diperlukan untuk port yang memiliki hak istimewa.
cfeduke
@ceduke - Oh! Kamu benar.
Swanand
@marimaf - Dokumentasi semakin matang dari waktu ke waktu. Berikut ini tautan baru: rvm.io/rvm/install
Swanand
Terima kasih, ini membantu mengakses VM MAC dari host pc untuk menguji aplikasi rel yang saya kerjakan. Dalam hal ini meskipun saya harus menggunakan opsi -b (bind) dengan alamat ip vm.
Tom T
-1

Anda dapat memulai server pada port 80

rails s -p 80

Jika port 80 tidak mengikat (proses lain tidak menggunakan ke port 80).

uma
sumber
1
Port di bawah 1024 membutuhkan akses root dan Anda tidak dapat menjalankan aplikasi sampai Anda belum menyiapkan rel melalui URL root. Saya telah menerapkan dan mengujinya.
Dinesh Saini