Fork me on GitHub
#clojure-russia
<
2016-04-01
>
az06:04:42

офтоп: кто-нибудь знает способ раздачи nginx - ом контента, который он получает в результате выполнения команды?

az06:04:42

гугл выдаёт поднятие cgi и прочего, или выполнения lua/perl, но кажется я видел когда-то путь проще

az06:04:20

там что-то вроде exec ‘bash command > filename.xml'

az06:04:36

и в итоге получаем xml на выходе

delaguardo07:04:38

вспомнил про вот такой модуль - https://github.com/arut/nginx-rtmp-module/wiki/Exec-wrapper-in-bash

delaguardo07:04:49

но сомневаюсь что это то что нужно

az07:04:12

да, не оно

niquola07:04:00

@az посмотри openresty, lua норм

dottedmag08:04:56

@az: Вообще-то "выполнить команду и получить контент" -- это определение CGI.

az08:04:12

@dottedmag: ну да да, ты прав, но хочется писать меньше

dottedmag08:04:34

Писать что?

az08:04:59

В идеале только конфиг к нжнксу

dottedmag08:04:25

Чтобы команде не пришлось самой выдавать все эти 200 OK и заголовки?

az08:04:48

У меня есть консольная утилита, которая экстрактит из xml то, что мне нужно, не хочу сервера писать, которые это всё обрабатывают, хочу конфиг и фыр фыр фыр

dottedmag08:04:21

Не нужен сервер. Можно взять любой cgi-враппер и воткнуть его fastcgi-бэкэндом к нгинксу.

az08:04:47

Cgi это почти сервер

dottedmag08:04:16

CGI - это скрипт такой.

dottedmag08:04:36

Ты ему на STDIN подаёшь запрос, в ENV - заголовки запроса, а на STDOUT он выплёвывает ответ, заголовки и тело.

dottedmag08:04:51

И дохнет.

dottedmag08:04:35

Если у тебя есть утилита, то из неё CGI сделать тривиально: 'bash -c "printf "200 OK\nContent-Type: text/xml\n\n"; ./утилита"

az08:04:57

Ну в итоге так и получится, но на lua. 😊

az09:04:10

Коля вон одобряет

dottedmag09:04:21

Ну да. А процесс nginx'овый lua заблокирует, пока ждёт ответа?

az09:04:35

Хз, посмотрим

dottedmag09:04:44

Ясно, значит заблокирует.

dottedmag09:04:52

Это ж не нода с промисами.

dottedmag09:04:06

Получилась не CGI, а пэхапэ.

az09:04:09

Да ты пессимист

pacman09:04:21

Всем доброго времени суток. Подскажите пожалуйста почему при сборке проекта с :aot all так сильно напрягается жесткий диск.

pacman09:04:45

использую lein

dottedmag09:04:47

@pacman: Он намекает, что пора поменять его на SSD.

pacman09:04:59

да гон же. причем тут SSD. память разве нельзя использовать и все такое? Вот clojurescript собирается нормально и диск не напрягает. а чисто clojure кряхтит там...

pacman09:04:07

как трактор гусеничный

dottedmag09:04:14

Значит паттерн обращений к диску такой, что алгоритм дискового кэша почему-то плохо работает.

dottedmag09:04:26

Либо слишком много данных с диска сосётся, и в памяти всё не оседает.

delaguardo09:04:26

https://clojurians.slack.com/archives/clojure-russia/p1459501244002090 не заблокирует, будет крутиться в корутине

pacman09:04:33

@dottedmag: а вы тоже такое замечали? хочу уточнить это у меня так или у все)

dottedmag09:04:23

@pacman: Нет, не замечал. Но у меня давно не осталось вращающихся кусков железа, по которым елозят головки, и создают этим ужасный latency.

dottedmag09:04:44

Так что на слух я распознать не могу.

dottedmag09:04:03

boot тормозит в любом случае, но на то он и boot.

dottedmag09:04:16

@delaguardo: Что, в lua есть exec, который yield'ит управление?

dottedmag09:04:12

@delaguardo: И как это сделано? В нгинксе lua подцеплен на его eventloop, и всё, что делает системные вызовы, обёрнуто в нгинксовую оболочку, а-ля нода?

delaguardo09:04:31

чего там только нет - http://www.lua.org/pil/9.1.html

pacman09:04:38

@andmed на 4clojure там на кого птичек протыкал, насколько я помню

dottedmag09:04:22

@delaguardo: Это не ответ.

dottedmag09:04:02

@delaguardo: Сопрограммы Lua - это не вытесняющая многозадачность (для этого нужна поддержка операционной системы).

delaguardo09:04:08

если я правильно помню, поддержка там за счет Lua VM и lua процесс действительно цепляется на eventloop nginx'a, не могу сходу найти пруф, но как найду скину в личку @dottedmag

dottedmag09:04:09

@delaguardo: В API ngx.* нет неблокирующегося запуска внешних процессов.

dottedmag09:04:19

Там только tcp/udp-сокеты и sleep.

fxposter09:04:52

а что, есть неблокирующий запуск вообще? simple_smile

dottedmag09:04:07

fork(2) зовётся.

fxposter09:04:20

ну это будет перебор simple_smile

fxposter09:04:25

как правило же неблокирующее только network io

dottedmag09:04:32

Ну, приехали.

fxposter09:04:45

даже disk io в linux блокирующее

fxposter09:04:10

там ограничения есть

dottedmag09:04:22

лолшто?

fxposter09:04:42

если почитать доки nginx-а - ЕМНИП там aio только блоками по 512байт

dottedmag09:04:43

Как вообще запускается что-либо? Пара fork/exec.

fxposter09:04:51

+ не поддерживается sendfile

fxposter09:04:01

я про aio

fxposter09:04:13

> fork(2) зовётся. это ж как раз CGI уже чистый

dottedmag09:04:33

Ну наконец-то до кого-то допёрло, что запуск внешнего скрипта - это CGI.

fxposter09:04:44

а кто-то спорил?)

fxposter09:04:04

от CGI же ушли потому что неэффективно

dottedmag09:04:13

SUDDENLY, хаха.

fxposter09:04:28

я просто в свое время разбирался с nginx-ом и io

fxposter09:04:58

так вот - типичный юзкейс nginx-а - это non blocking proxying + blocking disk io

fxposter09:04:16

в частности, потому что sendfile нужен

fxposter09:04:02

и для этого как раз делают много воркеров, потому что для проксирования в 99% случаев воркеры не нужны

az10:04:12

@dottedmag: ты говоришь, что local file = io.open(source_fname) в lua что-то там заблокирует?

az10:04:25

а, кажется понял о чём ты, ты про os.execute() да, он что-то там блочит, http://stackoverflow.com/questions/27039090/does-os-execute-block-thread-in-lua но вроде как обойти можно

dottedmag10:04:30

Ну, попробуй :)

andmed17:04:58

Я сломал lein репл 😞 на любой ввод включая "lein clean" дает exception

Caused by: clojure.lang.ArityException: Wrong number of args (4) passed to: core/interpose
в рабочей директории. в другой директории стартует нормально.😶

andmed17:04:23

так. исправил. в clj файле в рабочей директории скобочки стояли неправильно. не знал что lein таким образом вообще уронить можно :thinking_face:

andfadeev19:04:11

я чет туплю, lein run с dev профайлом запускается?

andfadeev19:04:17

по дефолту