czy ktoś mógłby mi podpowiedzieć, jak obsłużyć bieżący katalog z wiersza poleceń za pomocą ruby? byłoby wspaniale, gdybym mógł mieć jakąś konfigurację dla całego systemu (np. typy MIME) i po prostu uruchamiać ją z każdego katalogu.
Odpowiedzi:
Najprostszy możliwy sposób (dzięki Aaron Patterson / n0kada):
ruby -run -e httpd . -p 9090
Alternatywny, bardziej złożony sposób:
ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
Nawet pierwsze polecenie jest trudne do zapamiętania, więc mam to w moim .bashrc
:
function serve {
port="${1:-3000}"
ruby -run -e httpd . -p $port
}
Domyślnie obsługuje bieżący katalog na porcie 3000 , ale możesz również określić port:
~ $ cd tmp
~/tmp $ serve # ~/tmp served on port 3000
~/tmp $ cd ../www
~/www $ serve 5000 # ~/www served on port 5000
ruby -run -e httpd . -p 9090
spójrz na ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Wykonuje metodę httpd ze un
standardowej biblioteki ruby, dlatego wymaga un.
ruby -run -e httpd . -p 9090 &
Jeśli chcesz przywrócić go na pierwszy plan, użyj fg
.
Nigdy nie widziałem czegoś tak kompaktowego jak
python3 -m http.server
Możesz opcjonalnie dodać numer portu na końcu:
python3 -m http.server 9000
Jak Aaron Patterson opublikował to dzisiaj na Twitterze , możesz zrobić:
ruby -run -e httpd . -p 5000
Możesz również ustawić adres wiązania, dodając -b 127.0.0.1
Działa z Ruby 1.9.2 i nowszymi wersjami.
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
To może, ale nie musi być tym, czego chcesz, ale jest tak fajne, że po prostu musiałem się tym podzielić.
Używałem tego w przeszłości do obsługi systemu plików. Być może mógłbyś go zmodyfikować lub po prostu zaakceptować, że służy wszystkim.
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}'
Znalazłem to tutaj
Chris
Możesz użyć sinatra
klejnotu, chociaż nie wykonuje on dla ciebie żadnej listy katalogów, obsługuje pliki:
require 'sinatra' # gem
set :public_folder, '.'
następnie uruchom go jako plik, jeśli w 1.8 dodaj najpierw wymagaj 'rubygems' na górze.
Po uruchomieniu to adres URL jest podobny
http: // localhost: 4567 / nazwa_pliku
powinien zostać rozwiązany do pliku „./file_name”.
Jednak http: // localhost: 4567 nie będzie działać, ponieważ nie „wykonuje” list katalogów. Zobacz https://stackoverflow.com/a/12115019/32453, aby znaleźć obejście tego problemu.
python3 -m http.server
lub jeśli nie chcesz używać domyślnego portu 8000
python3 -m http.server 3333
lub jeśli chcesz zezwolić na połączenia tylko z hosta lokalnego
python3 -m http.server --bind 127.0.0.1
Zobacz dokumentację .