OpenResty: Можно ли создать ngx.shared.DICT в Lua без использования директивы?

В настоящее время я пишу несколько тестов для существующего приложения OpenResty. Он использует некоторые общие словари, которые создаются в файле nginx.conf через lua_shared_dict директива.

Я мог бы написать для него свою собственную фиктивную реализацию, но мне интересно, возможно ли программно создать ngx.shared.DICT объект?

Можно ли создать его в Lua, или лучше самому создать фиктивную реализацию?


Общие сведения. Моя текущая тестовая установка довольно проста. Я использую busted в качестве тестовой среды и запускаю ее из командной строки с двоичным файлом resty. Идея взята из этой статьи.


person Philipp Claßen    schedule 13.07.2017    source источник


Ответы (2)


Я не нашел программного способа создания общих словарей, поэтому в итоге издевался над ним:

ngx.shared.someDict = {}
ngx.shared.someDict.get = function(self, key)
  return ngx.shared.someDict[key]
end
ngx.shared.someDict.set = function(self, key, val)
  ngx.shared.someDict[key] = val
end
person Philipp Claßen    schedule 17.07.2017
comment
Сохраняет ли это другие общие поведения dict? как это последовательно после перезагрузки? распространяется ли он среди других рабочих nginx? вы тестировали это? - person Mercury; 24.12.2020
comment
@Mercury Как написано в вопросе, я использовал эту фиктивную настройку в модульных тестах. Таким образом, он не предназначен для использования в продуктивной среде с несколькими работниками. В контексте модульного тестирования этого было достаточно для моего варианта использования. - person Philipp Claßen; 24.12.2020

ngx.shared.DICT — это ngx_shm_zone_t, который используется nginx для разделения памяти между процессами. в руководстве по nginx , разделяемая память, выделенная при анализе конфигурации. может быть невозможно инициализировать в коде lua. в частности, ngx.shared.DICT используется для разделения памяти между процессами. когда рабочий процесс инициализирован, невозможно выделить память, совместно используемую с родительским процессом, с помощью вызова mmap.

person luvjoey    schedule 24.02.2020