servire la directory corrente dalla riga di comando


94

qualcuno potrebbe darmi un suggerimento, come servire la directory corrente dalla riga di comando con ruby? sarebbe fantastico se potessi avere una configurazione a livello di sistema (ad esempio tipi mime) e semplicemente avviarlo da ogni directory.

Risposte:


203

Modo più semplice possibile (grazie Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Modo alternativo e più complesso:

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

Anche il primo comando è difficile da ricordare, quindi ho solo questo nel mio .bashrc:

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

Serve la directory corrente sulla porta 3000 per impostazione predefinita, ma puoi anche specificare la porta:

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

Se sei su Windows, è possibile aggiungerlo a cmd o powershell come funzione?
Caleb

@Daniel - quando eseguo il tuo one liner sul mio Mac. Ho ricevuto questo messaggio di errore: costante non inizializzata INT (NameError). Lo stai eseguendo su una piattaforma diversa? Sai come posso evitarlo? Ma se lo scrivo in un file diciamo myserver.rb e poi faccio "ruby myserver.rb", funziona bene.
Tony Jiang

@TonyJiang Sto anche eseguendo su un Mac. Ho provato con Ruby 1.8.7, 1.9.3 e 2.0.0 e funzionano tutti. Strano.
Daniel Perez Alvarez

7
Per demistificare ruby -run -e httpd . -p 9090guarda ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Sta eseguendo il metodo httpd dalla unlibreria standard ruby, quindi richiede un.
Gee-Bee

1
@Deviljho se utilizzi Mac o Linux, aggiungi semplicemente una e commerciale alla fine del comando per inviarlo in background: ruby -run -e httpd . -p 9090 & Se vuoi riportarlo in primo piano, usa fg.
Daniel Perez Alvarez



5
require 'webrick'
include WEBrick

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

4

Usa rubino gemma Servire .

Per installare sul tuo sistema, esegui gem install serve.

Per servire una directory, è sufficiente eseguire il cd nella directory ed eseguire serve.

La porta predefinita è 4000. Può anche servire cose come ERB, HAML, Slim e SASS.


3

Web Server in 1 riga


Questo può essere o meno quello che vuoi, ma è così bello che ho dovuto condividerlo.

L'ho usato in passato per servire il file system. Forse potresti modificarlo o semplicemente accettare che serve a tutto.

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

L'ho trovato qui

Chris


3

Puoi usare la sinatragemma, anche se non fa alcun elenco di directory per te, serve file:

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

quindi eseguilo come file, se in 1.8 aggiungi prima "rubygems" all'inizio.

Dopo averlo eseguito, l'URL è come

http: // localhost: 4567 / nome_file

dovrebbe risolversi nel file "./file_name".

http: // localhost: 4567 non funzionerà tuttavia, poiché non "esegue" elenchi di directory. Consulta https://stackoverflow.com/a/12115019/32453 per una soluzione alternativa.


installa sinatra gem $ gem installa sinatra quindi salva questo testo in somefile.rb quindi
eseguilo

No, voglio dire, Sinatra mi dà l'errore: Sinatra non conosce questa canzoncina.
eveevans

@eveevans in qualche modo ha appena notato il tuo commento [LOL sorry], aggiornato ora.
Rogerdpack

1
python3 -m http.server

o se non si desidera utilizzare la porta predefinita 8000

python3 -m http.server 3333

o se si desidera consentire le connessioni solo da localhost

python3 -m http.server --bind 127.0.0.1

Vedi i documenti .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.