mevcut dizine komut satırından hizmet et


95

birisi bana bir ipucu verebilir mi, şu anki dizine Ruby ile komut satırından nasıl hizmet edilir? Sistem çapında bir konfigürasyona sahip olsam (örn. mime türleri) ve her dizinden basitçe başlatabilirsem harika olurdu.

Yanıtlar:


205

Mümkün olan en basit yol (teşekkürler Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Alternatif, daha karmaşık bir yol:

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

İlk komutun bile hatırlanması zor, bu yüzden şu bende var .bashrc:

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

Geçerli dizini varsayılan olarak 3000 numaralı bağlantı noktasında sunar , ancak bağlantı noktasını da belirtebilirsiniz:

~ $ cd tmp
~/tmp $ serve      # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000   # ~/www served on port 5000

Windows kullanıyorsanız, bunu cmd'ye veya powershell'e bir işlev olarak eklemek mümkün mü?
Caleb

@Daniel - Mac'imde tek astarını çalıştırdığımda. Bu hata mesajını aldım: başlatılmamış sabit INT (NameError). Farklı bir platformda mı çalıştırıyorsunuz? Bundan nasıl kaçınabileceğimi biliyor musun? Ama myserver.rb gibi bir dosyaya yazarsam "ruby myserver.rb" yazarsam, iyi çalışıyor.
Tony Jiang

@TonyJiang Ben de bir Mac üzerinde çalışıyorum. Ruby 1.8.7, 1.9.3 ve 2.0.0 ile denedim ve hepsi çalışıyor. Tuhaf.
Daniel Perez Alvarez

7
Demistify için ruby -run -e httpd . -p 9090bakmak ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . unRuby standart kitaplığından httpd yöntemini çalıştırıyor , bu nedenle un gerektirir.
Gee-Arı

1
@Deviljho, Mac veya Linux üzerinde çalışıyorsanız, arka plana göndermek için komutun sonuna bir "ve" işareti ekleyin: ruby -run -e httpd . -p 9090 & Ön plana geri getirmek istiyorsanız, kullanın fg.
Daniel Perez Alvarez



5
require 'webrick'
include WEBrick

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

4

Ruby gem Serve kullanın .

Sisteminize kurmak için çalıştırın gem install serve.

Bir dizine hizmet etmek için dizine cd koymanız ve çalıştırmanız yeterlidir serve.

Varsayılan bağlantı noktası 4000'dir. Ayrıca ERB, HAML, Slim ve SASS gibi şeylere hizmet edebilir.


3

1 satırda Web Sunucusu


İstediğin şey bu olabilir de olmayabilir de ama o kadar havalı ki paylaşmak zorunda kaldım.

Bunu geçmişte dosya sistemine hizmet etmek için kullandım. Belki onu değiştirebilir ya da her şeye hizmet ettiğini kabul edebilirsiniz.

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}'

Onu burada buldum

Chris


3

Gem'i kullanabilirsiniz sinatra, ancak sizin için herhangi bir dizin listesi yapmasa da dosyalar sunar:

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

sonra bunu bir dosya olarak çalıştırın, eğer 1.8'de ilk önce 'rubygems' gerektirirse.

Çalıştırdıktan sonra url gibi

http: // localhost: 4567 / dosya_adı

"./file_name" dosyasına çözümlenmelidir.

Ancak http: // localhost: 4567 , dizin listelerini "yapmadığı" için çalışmayacaktır. Orada bir çözüm için https://stackoverflow.com/a/12115019/32453 adresine bakın .


sinatra gem $
gem'i kurun sinatra'yı

Hayır, yani Sinatra bana hata veriyor: Sinatra bu zırvalığı bilmiyor.
eveevans

@eveevans bir şekilde yorumunuzu fark etti [LOL üzgünüm], şimdi güncellendi.
rogerdpack

1
python3 -m http.server

veya varsayılan bağlantı noktası 8000'i kullanmak istemiyorsanız

python3 -m http.server 3333

veya yalnızca localhost'tan bağlantılara izin vermek istiyorsanız

python3 -m http.server --bind 127.0.0.1

Dokümanlara bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.