может кто-нибудь дать мне подсказку, как обслуживать текущий каталог из командной строки с помощью ruby? было бы здорово, если бы я мог иметь некоторую общесистемную конфигурацию (например, mime-типы) и просто запускать ее из каждого каталога.
Ответы:
Самый простой способ (спасибо Аарону Паттерсону / n0kada):
ruby -run -e httpd . -p 9090
Альтернативный, более сложный способ:
ruby -r webrick -e "s = WEBrick::HTTPServer.new(:Port => 9090, :DocumentRoot => Dir.pwd); trap('INT') { s.shutdown }; s.start"
Даже первую команду сложно запомнить, поэтому у меня просто есть это .bashrc
:
function serve {
port="${1:-3000}"
ruby -run -e httpd . -p $port
}
По умолчанию он обслуживает текущий каталог на порту 3000 , но вы также можете указать порт:
~ $ 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
посмотрите ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Он выполняет метод httpd из un
стандартной библиотеки ruby, поэтому требует un.
ruby -run -e httpd . -p 9090 &
если вы хотите вернуть ее на передний план, используйте fg
.
Я никогда не видел ничего более компактного, чем
python3 -m http.server
При желании вы можете добавить в конец номер порта:
python3 -m http.server 9000
Как написал сегодня в Твиттере Аарон Паттерсон , вы можете:
ruby -run -e httpd . -p 5000
И вы также можете установить адрес привязки, добавив -b 127.0.0.1
Работает с Ruby 1.9.2 и выше.
require 'webrick'
include WEBrick
s = HTTPServer.new(:Port => 9090, :DocumentRoot => Dir::pwd)
trap("INT"){ s.shutdown }
s.start
Это может быть или не совсем то, что вы хотите, но это настолько круто, что мне просто пришлось поделиться этим.
Я использовал это в прошлом для обслуживания файловой системы. Возможно, вы могли бы изменить его или просто признать, что он служит всему.
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}'
Я нашел это здесь
Крис
Вы можете использовать sinatra
гем, хотя он не делает для вас список каталогов, он обслуживает файлы:
require 'sinatra' # gem
set :public_folder, '.'
затем запустите это как файл, если в 1.8 сначала добавьте require 'rubygems' в начало.
После его запуска URL-адрес вроде
http: // localhost: 4567 / имя_файла
должен разрешиться в файл "./file_name".
http: // localhost: 4567 , однако, не будет работать, так как он не "выполняет" списки каталогов. См. Https://stackoverflow.com/a/12115019/32453 для обходного пути.