melayani direktori saat ini dari baris perintah

94

dapatkah seseorang memberi saya petunjuk, bagaimana cara melayani direktori saat ini dari baris perintah dengan ruby? alangkah baiknya, jika saya dapat memiliki beberapa konfigurasi sistem yang luas (mis. mime-types) dan cukup meluncurkannya dari setiap direktori.

Sebastian
sumber

Jawaban:

204

Cara paling sederhana (terima kasih Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Alternatif, cara yang lebih kompleks:

ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"

Bahkan perintah pertama sulit untuk diingat, jadi saya hanya memiliki ini di .bashrc:

function serve {
  port="${1:-3000}"
  ruby -run -e httpd . -p $port
}

Ini melayani direktori saat ini pada port 3000 secara default, tetapi Anda juga dapat menentukan port:

~ $ cd tmp
~/tmp $ serve      # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000   # ~/www served on port 5000
Daniel Perez Alvarez
sumber
Jika Anda menggunakan windows, apakah mungkin menambahkan ini ke cmd atau PowerShell sebagai fungsi?
Kaleb
@ Daniel - saat saya menjalankan satu liner Anda di Mac saya. Saya mendapat pesan kesalahan ini: INT konstan yang tidak diinisialisasi (NameError). Apakah Anda menjalankannya di platform yang berbeda? Tahukah Anda bagaimana saya bisa menghindari ini? Tetapi jika saya menulisnya ke dalam file, katakan myserver.rb lalu lakukan "ruby myserver.rb", itu berfungsi dengan baik.
Tony Jiang
@TonyJiang Saya juga menggunakan Mac. Mencoba dengan Ruby 1.8.7, 1.9.3 dan 2.0.0, dan semuanya berfungsi. Aneh.
Daniel Perez Alvarez
7
Untuk menghapus, ruby -run -e httpd . -p 9090lihat ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Ini menjalankan metode httpd dari unpustaka standar ruby, sehingga memerlukan un.
Gee-Bee
1
@Deviljho jika Anda berjalan di Mac atau Linux, cukup tambahkan ampersand di akhir perintah untuk mengirimkannya ke latar belakang: ruby -run -e httpd . -p 9090 & Jika Anda ingin mengembalikannya ke latar depan, gunakan fg.
Daniel Perez Alvarez
21

Seperti Aaron Patterson men-tweetnya hari ini, Anda dapat melakukan:

ruby -run -e httpd . -p 5000

Dan Anda juga dapat mengatur alamat pengikatan dengan menambahkan -b 127.0.0.1

Bekerja dengan Ruby 1.9.2 dan yang lebih baru.

KARASZI István
sumber
5
require 'webrick'
include WEBrick

s = HTTPServer.new(:Port => 9090,  :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
rogerdpack
sumber
4

Gunakan permata ruby Sajikan .

Untuk menginstal di sistem Anda, jalankan gem install serve.

Untuk melayani direktori, cukup cd ke direktori dan jalankan serve.

Port default adalah 4000. Ia juga dapat melayani hal-hal seperti ERB, HAML, Slim dan SASS.

jellymann
sumber
3

Server Web dalam 1 baris


Ini mungkin atau mungkin tidak seperti yang Anda inginkan, tetapi sangat keren sehingga saya harus membagikannya.

Saya telah menggunakan ini di masa lalu untuk melayani sistem file. Mungkin Anda dapat memodifikasinya atau hanya menerima bahwa itu melayani segalanya.

ruby -rsocket -e 's=TCPServer.new(5**5);loop{_=s.accept;_<<"HTTP/1.0 200 OK\r\n\r\n#{File.read(_.gets.split[1])rescue nil}";_.close}'

Saya menemukannya di sini

Chris

Chris McCauley
sumber
3

Anda dapat menggunakan sinatragem, meskipun tidak melakukan daftar direktori apa pun untuk Anda, ini melayani file:

require 'sinatra' # gem
set :public_folder, '.'

kemudian jalankan itu sebagai file, jika di 1.8 tambahkan membutuhkan 'rubygems' ke atas terlebih dahulu.

Setelah menjalankannya maka url seperti

http: // localhost: 4567 / nama_file

harus menyelesaikannya menjadi file "./file_name".

http: // localhost: 4567 tidak akan berfungsi, karena tidak "melakukan" daftar direktori. Lihat https://stackoverflow.com/a/12115019/32453 untuk solusi di sana.

rogerdpack
sumber
instal permata sinatra $ gem instal sinatra lalu simpan teks ini ke somefile.rb lalu jalankan
rogerdpack
Tidak, maksud saya, Sinatra memberi saya kesalahan: Sinatra tidak tahu lagu pendek ini.
malam
@eveevans entah bagaimana baru memperhatikan komentar Anda [LOL maaf], diperbarui sekarang.
rogerdpack
1
python3 -m http.server

atau jika Anda tidak ingin menggunakan port default 8000

python3 -m http.server 3333

atau jika Anda ingin mengizinkan koneksi dari localhost saja

python3 -m http.server --bind 127.0.0.1

Lihat dokumennya .

Boris
sumber