- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在不重新启动应用程序的情况下在 tarantool cartridge
中执行热重载代码?
最佳答案
为了找到问题的最佳解决方案,了解您要实现的目标非常重要。有 2 种可能的情况:
第一个可以通过卸载模块并再次加载来完成。所有模块在加载时都会将自己放入“package.loaded”表中。所以你只需要更新它:
package.loaded['mymodule'] = nil
require('mymodule')
这是一种您可以概括的低级方法:遍历“package.loaded”的内容,卸载所有内容并重新加载。您需要注意不要卸载文件系统中不存在的模块。有一个模块可以帮助您解决这个问题:https://github.com/moonlibs/package-reload
虽然该模块将帮助您了解基础知识,但您还需要考虑其他事项。在 Lua 中很容易在全局对象中存储函数指针。如果您重新加载函数本身,您将不会神奇地更新所有具有指向旧函数的指针的地方。例如,让我们考虑 http 服务器:
-- in mymodule.lua
local function handler(req)
local resp = req:render({text = req.method..' '..req.path })
resp.headers['x-test-header'] = 'test';
resp.status = 201
return resp
end
-- somewhere else
router:route({ path = '/test', method = 'GET' }, mymodule.handler)
如果你重新加载 mymodule.lua,而不是再次调用 router:route 来重新注册处理程序,HTTP 请求仍然会调用旧函数。
在 cartridge 中,您通常在 apply_config() 或 init() 中注册函数。参见 here例如。为了重新注册回调,您需要再次调用角色的 init() 或 apply_config() 。要获取角色列表,您可以使用 cartridge.roles.get_known_roles() .您需要遍历它们并重新初始化它们。
为了调用重新加载代码的函数,您需要通过二进制协议(protocol)进行连接,或者使用管理套接字。管理套接字允许您为此编写一个简单的 shell 脚本。你可以通过查看 tarantool_is_up script 来了解这个想法。 .它展示了您可以针对您的用例进行调整的方法。
实现此目的的第二种方法是使用 cartridge-extensions这使您可以通过网络推送新代码。它已经具有一些优点,例如简化了与公共(public)端点的绑定(bind)。
关于tarantool - 如何在 tarantool 墨盒中执行热重载代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63902540/
我的应用程序已崩溃,因为它无法连接到 postgres 数据库,当我尝试通过 ssh 和 psql 连接到数据库时,我收到以下消息: psql: could not connect to server
步骤: 按照 Shipley 关于 DIY 的“学习 Openshift”一章中的步骤进行操作 制作了一个 DIY 墨盒 ssh 进入 发送到应用根目录/数据 wget .....tomcat 8 解
我们在 OpenShift 上的具有多个齿轮的扩展应用程序中运行 Java 后端应用程序。我们使用 JGroups 创建自己的沟通 channel 。 因此,我们需要在 JVM 命令行中添加一些额外的
我是一名优秀的程序员,十分优秀!