servir el directorio actual desde la línea de comandos


94

¿Alguien podría darme una pista, cómo servir el directorio actual desde la línea de comando con ruby? Sería genial, si pudiera tener alguna configuración de todo el sistema (por ejemplo, tipos mime) y simplemente ejecutarlo desde cada directorio.

Respuestas:


203

La forma más sencilla posible (gracias Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Manera alternativa, más compleja:

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

Incluso el primer comando es difícil de recordar, así que solo tengo esto en mi .bashrc:

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

Sirve el directorio actual en el puerto 3000 de forma predeterminada, pero también puede especificar el puerto:

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

Si está en Windows, ¿es posible agregar esto a cmd o powershell como una función?
Caleb

@Daniel: cuando ejecuto tu única línea en mi Mac. Recibí este mensaje de error: INT constante no inicializada (NameError). ¿Lo está ejecutando en una plataforma diferente? ¿Sabes cómo puedo evitar esto? Pero si lo escribo en un archivo, diga myserver.rb y luego "ruby myserver.rb", funciona bien.
Tony Jiang

@TonyJiang También estoy usando una Mac. Lo probé con Ruby 1.8.7, 1.9.3 y 2.0.0, y todos funcionan. Extraño.
Daniel Perez Alvarez

7
Para desemistificar, ruby -run -e httpd . -p 9090consulte ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Está ejecutando el método httpd de unla biblioteca estándar de ruby, por lo que requiere un.
Gee-Bee

1
@Deviljho si está ejecutando en Mac o Linux, simplemente agregue un ampersand al final del comando para enviarlo a segundo plano: ruby -run -e httpd . -p 9090 & si desea traerlo de vuelta al primer plano, use fg.
Daniel Perez Alvarez



5
require 'webrick'
include WEBrick

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

4

Use ruby ​​gem Servir .

Para instalar en su sistema, ejecute gem install serve.

Para servir un directorio, simplemente cd al directorio y ejecutar serve.

El puerto predeterminado es 4000. También puede servir para cosas como ERB, HAML, Slim y SASS.


3

Servidor web en 1 línea


Esto puede o no ser exactamente lo que quieres, pero es tan genial que tuve que compartirlo.

He usado esto en el pasado para servir el sistema de archivos. Quizás podrías modificarlo o simplemente aceptar que sirve para todo.

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

Lo encontré aquí

Chris


3

Puede usar la sinatragema, aunque no hace ninguna lista de directorios por usted, sirve archivos:

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

luego ejecútelo como un archivo, si en 1.8 agregue primero require 'rubygems' en la parte superior.

Después de ejecutarlo, la URL es como

http: // localhost: 4567 / nombre_archivo

debería resolverse en el archivo "./file_name".

http: // localhost: 4567 no funcionará sin embargo, ya que no "hace" listados de directorios. Consulte https://stackoverflow.com/a/12115019/32453 para obtener una solución alternativa.


instalar sinatra gem $ gem instalar sinatra luego guardar este texto en somefile.rb y luego ejecutarlo
rogerdpack

No, quiero decir, Sinatra me da el error: Sinatra no conoce esta cancioncilla.
Eveevans

@eveevans de alguna manera acaba de notar tu comentario [LOL sorry], actualizado ahora.
rogerdpack

1
python3 -m http.server

o si no desea utilizar el puerto predeterminado 8000

python3 -m http.server 3333

o si desea permitir conexiones solo desde localhost

python3 -m http.server --bind 127.0.0.1

Consulte los documentos .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.