Andrey
о Спасибо!
а если storage lua не будет или там внутри баг nginx продолжит работать или упадет ?
Snusmumriken
500
Andrey
т.е. весь не упадет
Snusmumriken
Очевидно нет, он вообще довольно надёжен. А в лог напишет конкретную причину.
Andrey
на другие серверы все норм будет ? и стартанет
Snusmumriken
На другие серверы есть редирект. Нгинкс/рестя может работать балансером.
Andrey
ну просто у меня если в conf.d где то ошибка в любом из фпйлов - он не запускается
Andrey
допустим на сервере 20 доменов
Snusmumriken
Ааа, да, так можно.
Andrey
остальные 19 будут работать ?
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. Ошибка для меня была довольно трудноуловима, а польза от этого не выявлена.
Andrey
Egor
Доброго дня. А есть бест практис по написанию модулей ? Как лучше? И если у меня использкются глобальные переменные, то лучше все равно переменную передавать в функцию из модулая или можно просто внутри заюзать?
Lucky
🐅🤦♂️
Если у тебя глобальные переменные ИМХО лучше написать в комментарий о них в верхушке модуля.
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
Egor
Этот вариант классический и сам по себе норм. Если нужен конфиг — можно мутить что-то такое, но лучше не надо, пущай лучше возвращает классы, чтобы юзер накрафтил себе чего ему надобно, и мог подрубать этот модуль в разных местах, создавая новый объект с отдельными настройками.
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
Спасибо.
Egor
Этот вариант классический и сам по себе норм. Если нужен конфиг — можно мутить что-то такое, но лучше не надо, пущай лучше возвращает классы, чтобы юзер накрафтил себе чего ему надобно, и мог подрубать этот модуль в разных местах, создавая новый объект с отдельными настройками.
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
Ой, оно тут лишнее, у меня ооп головного мозга и привычки лепить методы. Пофиксил.
Egor
Snusmumriken
Что это такое — прочитай, например, тут:
https://habr.com/ru/post/346892/
Snusmumriken
Не юзай прежде чем не поймёшь что такое двоеточие, а то запутаешься ))
Max
вот ещё гайд: http://kiki.to/blog/2014/03/30/a-guide-to-authoring-lua-modules/ (не понимаю, почему до сих пор никто не запостил эту ссылку)
Snusmumriken
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
всем привет :)
Andrey
Pavel
https://www.haproxy.com/blog/haproxy-2-0-and-beyond/
Pavel
Новость относится к бекенд-части.
haproxy часто используют как легковесный балансировщик. Нередко вместе с tarantool.
Сама прокся используется повсеместно.
потому появление поддержки Lua - big deal я считаю
mva
> появление
mva
Lua там уже 300 лет
Pavel
Serezha
и все равно жаль что луашники профукали новый рассвет который было видно за Torch и луа так и останется просто встраиваемым языком скриптов а не чем то большим
Serezha
пришли питонисты затоптпали луашников в революции машин лернинга
Lucky
луа прекрасен такой, какой он есть
Lucky
нет никаких луашников
Lucky
и питонистов
Serezha
если бы все так думали не было бы луаджит и роста популярности который он вызвал
Serezha
так же как рельсы вызвали рост популярности руби на порядки
Lucky
У вас, месье, парадигма восприятия покоцана.
Serezha
покоцана или нет но еще 2-3 года назад на Торче выходили революционные штучки а сейчас проект остановлен
Lucky
это всё инструменты
Lucky
т.н. штучки не имеют ни самостоятельного смысла ни обособленной ценности
Lucky
они обретают таковые лишь будучи приложеными к чему-либо
Serezha
вот 2-3 года назад ценность создавали на базе торча а теперь нет - и в торче имхо был луашный шанс выйти из ниши тупого встраиваемого языка в мейнстрим
Lucky
так же есть плотники и столяры. но нет топористов и рубанщиков. Андерстенд?
Serezha
вы топорист или рубанщик я не понял
Yuriy
мейнстрим - быть хорошим разработм
Yuriy
и уметь пользоваться интсрументами
Yuriy
и это было есть и будет всегда
Serezha
я разве спорю - я к тому клоню что сегодня я буду писать нейронку на питоне а не луа
Serezha
а три года назад писал бы на луа вполне