обслуговувати поточний каталог із командного рядка


94

хтось може дати мені підказку, як обслуговувати поточний каталог із командного рядка за допомогою ruby? було б чудово, якби я міг мати якусь загальносистемну конфігурацію (наприклад, mime-типи) і просто запустити її з кожного каталогу.

Відповіді:


203

Найпростіший можливий спосіб (дякую Аарону Паттерсону / 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

Якщо ви користуєтеся Windows, чи можна додати це до cmd або PowerShell як функцію?
Калеб,

@Daniel - коли я запускаю ваш один лайнер на своєму Mac. Я отримав таке повідомлення про помилку: неініціалізована константа INT (NameError). Ви запускаєте його на іншій платформі? Ви знаєте, як я можу цього уникнути? Але якщо я записую це у файл, скажімо myserver.rb, то роблю "ruby myserver.rb", це працює нормально.
Tony Jiang

@TonyJiang Я також працюю на Mac. Спробував з Ruby 1.8.7, 1.9.3 і 2.0.0, і всі вони працюють. Дивно.
Даніель Перес Альварес

7
Щоб демістифікувати, ruby -run -e httpd . -p 9090перегляньте ruby-doc.org/stdlib-2.0.0/libdoc/un/rdoc/index.html . Він виконує метод httpd зі unстандартної бібліотеки ruby, тому вимагає un.
Гі-Бі

1
@Deviljho, якщо ви працюєте на Mac або Linux, просто додайте амперсанд у кінці команди, щоб відправити його на задній план: ruby -run -e httpd . -p 9090 & Якщо ви хочете повернути його на передній план, використовуйте fg.
Даніель Перес Альварес



5
require 'webrick'
include WEBrick

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

4

Використовуйте рубіновий самоцвіт Подавати .

Щоб встановити у вашій системі, запустіть gem install serve.

Щоб обслуговувати каталог, просто cd до каталогу та запустіть serve.

Порт за замовчуванням - 4000. Він також може обслуговувати такі речі, як ERB, HAML, Slim і SASS.


3

Веб-сервер в 1 рядок


Це може бути чи не зовсім те, що ви хочете, але це настільки круто, що мені просто довелося поділитися цим.

Раніше я використовував це для обслуговування файлової системи. Можливо, ви могли б його змінити або просто прийняти, що він обслуговує все.

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

я знайшов це тут

Кріс


3

Ви можете використовувати sinatraсамоцвіт, хоча він не робить для вас жодного списку каталогів, він обслуговує файли:

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

потім запустіть це як файл, якщо в 1.8 додати спочатку потрібно 'rubygems' до початку.

Після запуску тоді URL-адреса подобається

http: // localhost: 4567 / ім'я_файла

має перейти до файлу "./file_name".

http: // localhost: 4567 , однак, не буде працювати, оскільки він не "робить" списки каталогів. Дивіться https://stackoverflow.com/a/12115019/32453, щоб дізнатися, як це зробити.


встановити gat sinatra $ gem встановити sinatra, потім зберегти цей текст у somefile.rb, а потім запустити
rogerdpack

Ні, я маю на увазі, що Синатра видає мені помилку: Сінатра не знає цієї дрібниці.
eveevans

@eveevans якось просто помітив ваш коментар [LOL жаль], оновлений зараз.
rogerdpack

1
python3 -m http.server

або якщо ви не хочете використовувати порт 8000 за замовчуванням

python3 -m http.server 3333

або якщо ви хочете дозволити з'єднання лише з localhost

python3 -m http.server --bind 127.0.0.1

Див. Документи .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.