【问题标题】:Is there a way to run a .lua file on a webserver from a .lua that isn't?有没有办法从不是的 .lua 在网络服务器上运行 .lua 文件?
【发布时间】:2021-08-14 12:13:34
【问题描述】:

我正在寻找一种创建 .lua 的方法,它是一种“加载器”。我想知道是否有一种方法可以在包含例如的 Web 服务器上创建 .lua:

file_1.lua -- on webserver

local function print_hello()
    print("hello!")
end

并拥有一个不在网络服务器上的单独 .lua 文件,该文件可以访问、返回和运行 file_1.lua 的内容,就像它是原始 file_1.lua 文件一样。

file_2.lua -- not on webserver

hello!

感谢任何帮助!如果这个问题不清楚,我会尽量把它弄清楚。

提前致谢!

【问题讨论】:

  • 如果file_2.lua 不在网络服务器上,它在哪里?网络浏览器的机器?
  • 我使用 Lua 作为 Apache 2 的 CGI。从这个角度来看,我想说:是的,你可以 - 但是这有什么意义呢? Lua CGI 生成的 HTML/CSS 仅在 Web 浏览器中才有意义。另一个陷阱可能是:Webserver 的环境(如查询字符串)在外部调用 Lua 脚本的 bash 环境级别上不可用。
  • @koyaanisqatsi - 尝试从 Lua CGI 脚本中读取 $QUERY_STRING env var。
  • @Egor 我的意思是:这适用于在 Web 浏览器中调用的 CGI,但不适用于在没有 Web 服务器环境的情况下直接调用 Lua CGI 脚本的外部 Lua 脚本。 QUERY_STRING 只是一个示例。如果脚本尝试读/写 cookie,则会出现更多失败。

标签: lua


【解决方案1】:

要通过 HTTP 获取 Lua 文件的源代码,您必须以某种方式扩展 Lua。
在 Linux 上,使用能够将 Linux 命令的输出存储在 Lua 变量中的函数来扩展 Lua 相对简单...

local cmd=function(shell)
return io.popen(shell, 'r'):read('a+')
end

然后,在 Linux Shell 上,找到一个命令以从网络服务器输出已交付文件的内容。
我找到wget ;-) ...

wget -q -O- localhost/file_1.lua

我现在的建议是将file_1.lua 调整为...

--[[
This file defining function(s) and return all in a table
]]

local function print_hello()
    print("hello!")
end

return {print_hello=print_hello}

然后一个加载器就简单的用...完成了

package.preload.weblua=load(cmd('wget -q -O- localhost/file_1.lua'),'Hello Example')

您现在可以使用require()...

weblua=require('weblua')

...玩一玩,试试...

weblua.print_hello()

如果file_1.lua 被更改/扩展(在很长的脚本运行时?),直接的方法是直接调用加载程序。
它还在该表中返回一个函数。
与...

package.preload.weblua().print_hello()

【讨论】:

    猜你喜欢
    • 2017-07-11
    • 2018-07-25
    • 1970-01-01
    • 2019-01-17
    • 2021-11-24
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多