Это копипаст с небольшими правками из моего блога, который я использую для сохранения информации, потенциально полезной для меня, но которую обычно забываю. Посчитал, что инфа может показаться кому-нибудь интересной.
Intro
Относительно недавно искал способ в одну строчку запустить веб-сервер в текущей директории.
На просторах Stack Overflow нашел примерно такую команду:
ruby -run -e httpd -- -p 9090 [DIR]
Что же это за загадочная опция -run
и почему ее нет в мануале?
Опция -run
Разумеется, никакая это не опция. Точнее, опция, но не run
. Обратите внимание на то, что перед ней стоит одно тире, а не два.
На самом деле, это опция -r
с аргументом un
. В свою очередь un
— это файлик в стандартной библиотеке, который определяет несколько полезных функций, которые удобно использовать в однострочниках.
Одна из них — httpd
которая просто запускает WebBrick
, используя параметры из ARGV
(в данном случае — порт и директория).
Доступность
Очевидно, это весьма старый файл, т.к. я нашел документацию к нему аж для версии 1.8.6
.
Так что можно использовать без боязни.
А что еще есть?
Копирую из документации:
ruby -run -e cp -- [OPTION] SOURCE DEST
ruby -run -e ln -- [OPTION] TARGET LINK_NAME
ruby -run -e mv -- [OPTION] SOURCE DEST
ruby -run -e rm -- [OPTION] FILE
ruby -run -e mkdir -- [OPTION] DIRS
ruby -run -e rmdir -- [OPTION] DIRS
ruby -run -e install -- [OPTION] SOURCE DEST
ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
ruby -run -e touch -- [OPTION] FILE
ruby -run -e help [COMMAND]
Заключение
Полагаю, что использовать un
вне однострочников вида ruby -run -e
не имеет смысла, т.к. каждый из методов, определенных там, использует ARGV. Но полезно иметь на заметку, что ruby умеет это. Скорее всего, в Windows это будет работать точно так же (я вот не знаю, как в винде удалить файл или создать директорию, а тут все определено в руби).
Кстати, добавил себе в баш такую команду:
alias start-webrick='ruby -run -e httpd -- -p 9090'
Очень удобно.
Ссылка на гитхаб
Комментарии (17)
rusnasonov
05.01.2017 23:09А ещё вебсервер в одну строчку можно так:
python -m http.server 8000
(python 3)foxmuldercp
06.01.2017 01:07У меня где-то в загашнике валялся веб сервер на bash'е.
А на всяких перлах да питонах штатные библиотеки есть, аналоги этим рубишным
AFakeman
06.01.2017 14:38А для чего запускать веб-сервер таким образом? Он разве не запустится в режиме "Hello, World!"?
kmeaw
06.01.2017 21:32Чтобы, например, быстро отдать коллеге (соседу по локалке) какой-нибудь файл из рабочей директории проекта по HTTP.
Sna1L
06.01.2017 21:55Я не уверен, но по идее эта команда работает так же, как и указаннаяя мною, т.е. сервер просто будет отдавать файлы из директории.
Лично мой use-case был таким:
Есть js-либа, которую мы форкнули от основого репозитория для интеграции в наш продукт. Соотв все правки происходили в форке, а проверялись в продукте.
Более конкретно: у меня было запущено два сервера: основной проект и в папке с либой. Подключалась она явным указанием локалхоста с нужным портом.
uniqm
09.01.2017 13:38-2ммм… а почему просто не запустить скрипт руби. внутри которого любая магия?
например, «ruby my_script.rb [параметры командной строки]», а уже внутри файла и валидаторы параметров командной строки, и их дефолтные значения на случай незаполненности, и запуск сервера и любой другой код.Sna1L
09.01.2017 16:24может быть потому, что для этого нужно этот самый скрипт написать?
uniqm
09.01.2017 17:47И чем его содержимое в простейшем случае будет отличаться от Вашего однострочника? \\Вопрос риторический
Я решал подобные задачи через скрипты (и вообще скрипты иногда пишу) — все быстро и славненько получается. Без «потолка» в развитии инструмента, в отличии от однострочников.Sna1L
09.01.2017 19:31Вы пытаетесь меня загнать в спор о велосипедах? Я люблю велосипеды, если они не мешают мне работать.
Последовательность моих действий:
- гугл, ruby webrick oneliner
- C-c
- C-v
- Добавить алиас в баш, если хочется
Последовательность действий при разработке велосипеда
- Гугл, webrick ruby
- открыть документацию
- Создать новый файл
- Написать код, который запустит чертов веб-сервер, который мне нужен буквально на часик
- Сделать файл исполняемым
- Сохранить так, чтобы он был в PATH.
- PROFIT. Вы великолепны.
Про "потолок" — просто оставлю это здесь.
uniqm
09.01.2017 22:10Что первый Ваш ответ, что второй — желчь какая-то. Считаю не заслужил ;) И причем тут велосипеды, я не понял… Искусственный потолок — так же плохо, как и пушкой по воробьям. Почти всегда, начиная с простого скрипта-хелпера — затем приходит аппетит ;)
PS а 7 пунктов это «пять» ;)Sna1L
10.01.2017 14:23Простите, не хотел показаться желчным.
"Пушкой по воробьям" — это как раз делать свои поделки для выполнения элементарных задач. Давайте тогда не использовать
cp
, а напишем свой скрипт с "Дураком" и барышнями.
Всему свое место. Запустить веб-сервер в текущей папке — типичный use-case. Редко что-то дополнительное нужно.
К тому же, возможности un.rb не ограничиваются веб-сервером. Это еще и имплементация "юниксовых" утилит вроде вышеупомянутой
cp
mwambanatanga
В первом же предложении — прямым текстом чистосердечное признание нарушения правил ресурса? Такого я ещё не видел.
На всякий случай цитата из Правил:
Sna1L
Главное — полезность для сообщества. Даже если я немного нарушил правила:)
На крайний случай, пусть меня накажет администрация, если это принципиально
am-amotion-city
Первая за долгое время действительно полезная заметка, причем в неожиданной теме, казалось бы, лежащей на поверхности, — и тут же вылезает какой-нибудь хранитель бессмысленных правил говноресурсика.
Sersoftin
Как интересно вы про хабр пишите :)
am-amotion-city
Я еще и грамотно это делаю, в отличие, так сказать, от.
«Пишете», а не «пишите» — на будущее. Так можно и дожить до осознания, что говнохабр — место для неудачников и пришедших почесать языком троллей, вот уже лет эдак пять.
Sersoftin
Прошу прощения за неграмотность.