Глюк при подключении модуля (require)

Статус
В этой теме нельзя размещать новые ответы.

qwaqwa

Новичок
Автор темы
3
0
Учусь работать с Nginx+Lua (учусь третий день, так что простите за нубский вопрос).

Так вот. Установил на свежую машину 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).

Логика подсказывает, что на первой машине в результате моих экспериментов образовался какой-то косяк с распознаванием модулей. В принципе, я могу тупо снести первую машину и не мучиться. Но хочется докопаться до причин ошибки и понять, где я накосячил.
 

qwaqwa

Новичок
Автор темы
3
0
Во-первых, какой строкой? В каком формате? Во-вторых, до переустановки "mysql -> percona" этот код работал, передавая в качестве параметра таблицу. В-третьих, на второй машине этот код тоже работает.

Т.е. дело в переустановке mysql, в переустановке lua-шных модулей и т.п. Но явно не в коде.
 

imring

Ride the Lightning
Всефорумный модератор
2,361
2,546
Во-первых, какой строкой? В каком формате? Во-вторых, до переустановки "mysql -> percona" этот код работал, передавая в качестве параметра таблицу. В-третьих, на второй машине этот код тоже работает.

Т.е. дело в переустановке mysql, в переустановке lua-шных модулей и т.п. Но явно не в коде.
верни старую версию библиотеки (ну которая у тебя раньше была).
 

qwaqwa

Новичок
Автор темы
3
0
Так версия одна и та же (0.15-0), взятая из репозитория luarocks.

luarocks install/remove lua-resty-mysql

Кроме того, непонятно, почему игнорируется ошибка подключения заведомо не существующего модуля (require "1234567890")
 
Статус
В этой теме нельзя размещать новые ответы.