aktuelles Verzeichnis über die Befehlszeile bedienen

94

Könnte mir jemand einen Hinweis geben, wie man das aktuelle Verzeichnis über die Kommandozeile mit Ruby bedient? Es wäre großartig, wenn ich eine systemweite Konfiguration (z. B. MIME-Typen) haben und sie einfach aus jedem Verzeichnis starten könnte.

Sebastian
quelle

Antworten:

202

Einfachster Weg möglich (danke Aaron Patterson / n0kada):

ruby -run -e httpd . -p 9090

Alternativer, komplexerer Weg:

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

Selbst der erste Befehl ist schwer zu merken, deshalb habe ich diesen in meinem .bashrc:

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

Es dient standardmäßig dem aktuellen Verzeichnis auf Port 3000 , Sie können jedoch auch den Port angeben:

~ $ cd tmp
~/tmp $ serve      # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000   # ~/www served on port 5000
Daniel Perez Alvarez
quelle
Wenn Sie unter Windows arbeiten, können Sie dies als Funktion zu cmd oder Powershell hinzufügen?
Caleb
@ Daniel - wenn ich deinen One Liner auf meinem Mac laufen lasse. Ich habe diese Fehlermeldung erhalten: nicht initialisierte Konstante INT (NameError). Führen Sie es auf einer anderen Plattform aus? Weißt du, wie ich das vermeiden kann? Aber wenn ich es in eine Datei schreibe, sagen wir myserver.rb, dann mache "ruby myserver.rb", es funktioniert gut.
Tony Jiang
@ TonyJiang Ich laufe auch auf einem Mac. Versuchte es mit Ruby 1.8.7, 1.9.3 und 2.0.0, und alle funktionieren. Seltsam.
Daniel Perez Alvarez
7
Informationen zur Demistifizierung finden Sie ruby -run -e httpd . -p 9090unter ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Es führt die httpd-Methode aus der unRuby-Standardbibliothek aus und erfordert daher un.
Gee-Bee
1
@Deviljho Wenn Sie unter Mac oder Linux arbeiten, fügen Sie am Ende des Befehls einfach ein kaufmännisches Und hinzu, um es in den Hintergrund zu senden: ruby -run -e httpd . -p 9090 & Wenn Sie es wieder in den Vordergrund stellen möchten, verwenden Sie fg.
Daniel Perez Alvarez
21

Wie Aaron Patterson heute getwittert hat, können Sie Folgendes tun:

ruby -run -e httpd . -p 5000

Sie können die Bindungsadresse auch durch Hinzufügen festlegen -b 127.0.0.1

Funktioniert mit Ruby 1.9.2 und höher.

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

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

Verwenden Sie Ruby Gem Serve .

Führen Sie die Installation auf Ihrem System aus gem install serve.

Um ein Verzeichnis bereitzustellen, legen Sie einfach eine CD in das Verzeichnis und führen Sie es aus serve.

Der Standardport ist 4000. Er kann auch ERB, HAML, Slim und SASS bedienen.

jellymann
quelle
3

Webserver in 1 Zeile


Das mag sein oder auch nicht, was du willst, aber es ist so cool, dass ich es einfach teilen musste.

Ich habe dies in der Vergangenheit verwendet, um das Dateisystem zu bedienen. Vielleicht könnten Sie es ändern oder einfach akzeptieren, dass es alles dient.

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

Ich habe es hier gefunden

Chris

Chris McCauley
quelle
3

Sie können das sinatraJuwel verwenden, obwohl es keine Verzeichnisliste für Sie erstellt, sondern Dateien bereitstellt:

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

Führen Sie das dann als Datei aus, wenn in 1.8 add 'rubygems' zuerst oben benötigt wird.

Nach dem Ausführen ist die URL wie

http: // localhost: 4567 / Dateiname

sollte in die Datei "./file_name" aufgelöst werden.

http: // localhost: 4567 funktioniert jedoch nicht, da es keine Verzeichnislisten "ausführt". Eine Problemumgehung finden Sie unter https://stackoverflow.com/a/12115019/32453 .

Rogerdpack
quelle
installiere das sinatra gem $ gem installiere sinatra und speichere diesen Text in somefile.rb und führe ihn dann aus
rogerdpack
Nein, ich meine, Sinatra gibt mir den Fehler: Sinatra kennt dieses Liedchen nicht.
Evaevans
@eveevans hat gerade Ihren Kommentar [LOL sorry] bemerkt, der jetzt aktualisiert wurde.
Rogerdpack
1
python3 -m http.server

oder wenn Sie den Standardport 8000 nicht verwenden möchten

python3 -m http.server 3333

oder wenn Sie nur Verbindungen von localhost zulassen möchten

python3 -m http.server --bind 127.0.0.1

Siehe die Dokumente .

Boris
quelle