Учусь работать с Nginx+Lua (учусь третий день, так что простите за нубский вопрос).
Так вот. Установил на свежую машину nginx, nginx-extras, luarocks, mysql и модуль lua-resty-mysql. И все работало. Потом произвел какие-то манипуляции (вместо mysql поставил Percona 5.7; потом Percona 5.6 т.к. в 5.7 не работает handlersocket, как-то еще похимичил) и получил следующую картину:
При выполнении этого кода в лог Nginx пишется ошибка: "bad argument #1 to 'connect' (string expected, got table)".
Если закомментировать вызов "db:connect", то ошибка исчезает, и "end of script, ok" показывается.
Если после этого вместо (require "resty.mysql") написать какую-нибудь чушь (require "1234567890"), то скрипт по-прежнему выполняется, и никакой ошибки в лог не пишется.
Я поднял вторую машину, установил все с нуля, все работает. При попытке написать (require "1234567890") в лог пишется ошибка (module "1234567890" not found).
Логика подсказывает, что на первой машине в результате моих экспериментов образовался какой-то косяк с распознаванием модулей. В принципе, я могу тупо снести первую машину и не мучиться. Но хочется докопаться до причин ошибки и понять, где я накосячил.
Так вот. Установил на свежую машину nginx, nginx-extras, luarocks, mysql и модуль lua-resty-mysql. И все работало. Потом произвел какие-то манипуляции (вместо mysql поставил Percona 5.7; потом Percona 5.6 т.к. в 5.7 не работает handlersocket, как-то еще похимичил) и получил следующую картину:
Lua:
local mysql = require "resty.mysql"
local db, err = mysql:new()
if not db then
ngx.say("failed to instantiate mysql: ", err)
return
end
local ok, err, errcode, sqlstate = db:connect{
host = "127.0.0.1",
port = 3306,
database = "ngx_test",
user = "ngx_test",
password = "ngx_test",
charset = "utf8",
max_packet_size = 1024 * 1024,
}
ngx.say("end of script, ok")
При выполнении этого кода в лог Nginx пишется ошибка: "bad argument #1 to 'connect' (string expected, got table)".
Если закомментировать вызов "db:connect", то ошибка исчезает, и "end of script, ok" показывается.
Если после этого вместо (require "resty.mysql") написать какую-нибудь чушь (require "1234567890"), то скрипт по-прежнему выполняется, и никакой ошибки в лог не пишется.
Я поднял вторую машину, установил все с нуля, все работает. При попытке написать (require "1234567890") в лог пишется ошибка (module "1234567890" not found).
Логика подсказывает, что на первой машине в результате моих экспериментов образовался какой-то косяк с распознаванием модулей. В принципе, я могу тупо снести первую машину и не мучиться. Но хочется докопаться до причин ошибки и понять, где я накосячил.