Snusmumriken
на пхп все просто - php-fpm перенаправляешь на хомяка в нужный файл и делаешь у себя спокойно.
Можно вместо локейшна взять /, и оно будет направлять с базового локейшна на, допустим, /index.lua.
Andrey
о Спасибо! а если storage lua не будет или там внутри баг nginx продолжит работать или упадет ?
Snusmumriken
500
Andrey
т.е. весь не упадет
Snusmumriken
Очевидно нет, он вообще довольно надёжен. А в лог напишет конкретную причину.
Andrey
на другие серверы все норм будет ? и стартанет
Snusmumriken
На другие серверы есть редирект. Нгинкс/рестя может работать балансером.
Andrey
ну просто у меня если в conf.d где то ошибка в любом из фпйлов - он не запускается
Andrey
допустим на сервере 20 доменов
Snusmumriken
Ааа, да, так можно.
Andrey
остальные 19 будут работать ?
Snusmumriken
ну просто у меня если в conf.d где то ошибка в любом из фпйлов - он не запускается
Ну это ошибка в конфиге. Понятное дело что не запустится, он же не может прочитать прям базовый конфиг. Зато говорит почему не может запуститься. А если он уже запущен — положить его крайне сложно.
Andrey
это понятно да. просто странно. если php-fpm упал то упадут только его домены. а тут любая ошибка и после рестарта он все остальное замтопорит этож конфиг
Andrey
с другой стороны там не так много будет серверов
Snusmumriken
Если нгинкс уже запущен, то у него ничего не падает. Если у тебя ошибка в пхп/луа файле на который направляет какой-то локейшн — упадёт только этот локейшн а не весь сервер, и в логе напишет где ошибка, вернув 500 клиенту.
Andrey
а, тогда норм
Andrey
и файлы можно на лету менять без перезапуска ?
Snusmumriken
А init_by_lua_block — заставляет все локейшны с луями добавлять этот кусочек кода к себе, я в любом локейшне пишу: local r_host = CONFIG.redis.host, и в целом могу настроить кучку всего.
Andrey
понял. а джит его схавает ? если не кэш
Snusmumriken
Схавает, но это всё равно снижает производительность, нгинкс об этом предупреждает при перезапуске.
Snusmumriken
Там очень низкоуровневое кеширование вм.
Andrey
ок, спасибо за ликбез
Andrey
начинаю понимать
Snusmumriken
начинаю понимать
Маленькое уточнение: используй ngx.pring а не ngx.say, особенно при выгрузке чанков бинарных данных, типа файлов, я на этом успел пролететь.
Snusmumriken
Если вот тут использовать не ngx.print а ngx.say, то после каждого отправленного кусочка будет добавлен символ \0, и конечный файл будет повреждён )) Поэтому лучше просто забыть про ngx.say или переопределить его на ngx.print. Ошибка для меня была довольно трудноуловима, а польза от этого не выявлена.
Egor
Доброго дня. А есть бест практис по написанию модулей ? Как лучше? И если у меня использкются глобальные переменные, то лучше все равно переменную передавать в функцию из модулая или можно просто внутри заюзать?
🐅🤦‍♂️
Если у тебя глобальные переменные ИМХО лучше написать в комментарий о них в верхушке модуля.
Lucky
Был бы этот товарищ сержант рядом
https://github.com/instead-hub/stead3-modules
Egor
Если у тебя глобальные переменные ИМХО лучше написать в комментарий о них в верхушке модуля.
А как писать модуль? Правильно ли так: mymodule = {} function mymodule.myfun() end return mymodule
Egor
Точнее в файле будет такой код
Egor
Зависит от дизайна модуля. Что у тебя делает модуль?
Что-то вычисляет, иногда некоторые просто выполняются внутри без возврата.
Egor
Зависит от дизайна модуля. Что у тебя делает модуль?
Точнее в большинстве случаев идёт частная работа с каким-то переменным глобальным
Snusmumriken
А как писать модуль? Правильно ли так: mymodule = {} function mymodule.myfun() end return mymodule
Этот вариант классический и сам по себе норм. Если нужен конфиг — можно мутить что-то такое, но лучше не надо, пущай лучше возвращает классы, чтобы юзер накрафтил себе чего ему надобно, и мог подрубать этот модуль в разных местах, создавая новый объект с отдельными настройками. local conf = { bla = 'foo', blabla = 100500 } -- local обязателен, а то будет глобальным local mymodule = {} function mymodule.myfun() end function mymodule.setBla(v) if type(v) ~= 'string' then return nil, 'Bla must be string, got ' .. type(v) end conf.bla = v return true end function mymodule.setBlabla(v) if type(v) ~= 'number' then return nil, 'Blabla must be number, got ' .. type(v) end conf.blabla = v return true end return mymodule
Snusmumriken
Ой, оно тут лишнее, у меня ооп головного мозга и привычки лепить методы. Пофиксил.
Snusmumriken
Что это такое — прочитай, например, тут: https://habr.com/ru/post/346892/
Snusmumriken
Не юзай прежде чем не поймёшь что такое двоеточие, а то запутаешься ))
Max
вот ещё гайд: http://kiki.to/blog/2014/03/30/a-guide-to-authoring-lua-modules/ (не понимаю, почему до сих пор никто не запостил эту ссылку)
Egor
Что это такое — прочитай, например, тут: https://habr.com/ru/post/346892/
Я правильно понял, что вместо pairs(mytable) можно сделать mytable._pairs ?
Snusmumriken
Можно сделать вот так: mytable = {} -- типа добавляем метод mytable.pairs = pairs -- типа вызываем метод for k, v in mytable:pairs() do ... end Прочитай сначала что такое двоеточие, я дал обширную фиговину, сам её писал, чтобы больше вообще никаких вопросов не было.
Andrey
2019/06/19 22:28:41 [error] 23265#23265: *1 lua entry thread aborted: runtime error: error loading module '_openssl.hmac' from file '/usr/local/lib/lua/5.1/_openssl.so': /usr/local/openresty/openssl/lib/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/local/lib/lua/5.1/_openssl.so) stack traceback: coroutine 0: [C]: in function 'require' content_by_lua(nginx.conf.compiled:22):2: in main chunk, client:
Andrey
может кто нить знает как это вылечить ?
Andrey
всем привет :)
Mark ☢️
может кто нить знает как это вылечить ?
Луашный биндинг не с той опенссл сконпилен
Andrey
Луашный биндинг не с той опенссл сконпилен
да, дело было в этом. починили.
Pavel
https://www.haproxy.com/blog/haproxy-2-0-and-beyond/
mva
https://www.haproxy.com/blog/haproxy-2-0-and-beyond/
эта новость тут только лишь потому что в haproxy есть Lua'шное API?
Pavel
Новость относится к бекенд-части. haproxy часто используют как легковесный балансировщик. Нередко вместе с tarantool. Сама прокся используется повсеместно. потому появление поддержки Lua - big deal я считаю
mva
> появление
mva
Lua там уже 300 лет
Pavel
Lua там уже 300 лет
и это здорово!
Serezha
и все равно жаль что луашники профукали новый рассвет который было видно за Torch и луа так и останется просто встраиваемым языком скриптов а не чем то большим
Serezha
пришли питонисты затоптпали луашников в революции машин лернинга
Lucky
луа прекрасен такой, какой он есть
Lucky
нет никаких луашников
Lucky
и питонистов
Serezha
если бы все так думали не было бы луаджит и роста популярности который он вызвал
Serezha
так же как рельсы вызвали рост популярности руби на порядки
Lucky
У вас, месье, парадигма восприятия покоцана.
Serezha
покоцана или нет но еще 2-3 года назад на Торче выходили революционные штучки а сейчас проект остановлен
Lucky
это всё инструменты
Lucky
т.н. штучки не имеют ни самостоятельного смысла ни обособленной ценности
Lucky
они обретают таковые лишь будучи приложеными к чему-либо
Serezha
вот 2-3 года назад ценность создавали на базе торча а теперь нет - и в торче имхо был луашный шанс выйти из ниши тупого встраиваемого языка в мейнстрим
Lucky
так же есть плотники и столяры. но нет топористов и рубанщиков. Андерстенд?
Serezha
вы топорист или рубанщик я не понял
Yuriy
вот 2-3 года назад ценность создавали на базе торча а теперь нет - и в торче имхо был луашный шанс выйти из ниши тупого встраиваемого языка в мейнстрим
Язык - это иструмент. не важно на сколько он мейнстримовый. Он решает задачи. Если он подходит под ваши задачи - вы его используете, если нет - не используете. А с мейнстримом такая штука - вчера node.js был модным. Сегодня Go ЗАвтра еще что то будет модным Но эта моднота или мейнтсрим - они ни как не определяют умения разработчика
Yuriy
мейнстрим - быть хорошим разработм
Yuriy
и уметь пользоваться интсрументами
Yuriy
и это было есть и будет всегда
Lucky
вы топорист или рубанщик я не понял
Это-то и видно, что не понял. Ну, старайся. Может и поймёшь. Оно несложное.
Serezha
я разве спорю - я к тому клоню что сегодня я буду писать нейронку на питоне а не луа
Serezha
а три года назад писал бы на луа вполне