lua模块没有加载库
背景资料:
我只是lua的新手,我正在努力了解模块是如何工作的.但我正在尝试将预先存在的模块加载到新脚本中,并从命令行运行此脚本. 码: 我有一个名为main.lua的文件,看起来像这样: module (...,package.seeall) -- Load libraries require("luasql.postgres") require("luasql.sqlite3") local connect_to_db = function() if not global_con then env = assert (luasql.postgres()) global_con = assert (env:connect(databasename,databaseUser,databasepassword,databaseserver)) return true else return false end end update_widget = function (parm1,parm2,parm3) local connected = connect_to_db() if connected then -- do something else return true end end -- end function. 我现在正在尝试为此模块创建一个测试脚本.我在一个单独的lua文件中有以下逻辑: package.path = '/usr/share/myapp/main.lua;' local my_object = require("main") print my_object.update_widget 问题: 我尝试运行测试脚本时收到以下错误: attempt to call field 'postgres' (a table value) 它失败的行是在connect_to_db()方法中,我尝试创建一个环境变量: env = assert (luasql.postgres()) 到目前为止我尝试过的事情: >我已经在我的测试脚本中修改了package.path,以匹配main.lua使用的内容.我这样做是通过执行main.lua的“常规”方式 – 由Web应用程序驱动 – 并将package.path的内容转储到日志文件中. package.path = '/var/x/appname/main.lua;' local pgdb = require("luasql.posgres") print(pgdb) myenv = assert(lua.postgres()) -- fails 测试脚本也试图创建这个对象…我将继续打猎.它一定是路径的问题……但我看不出Web应用程序加载时创建的路径与测试脚本中的路径之间的区别. 任何建议,将不胜感激. 谢谢. 编辑1 我绝对认为这是路径,虽然我不知道这里有什么问题. luasql = require "luasql.postgres" local myenv = assert (luasql.postgres()) print(myenv) 但这失败了: package.path = package.path .. ';/usr/share/myapp/main.lua' luasql = require "luasql.postgres" myenv = assert (luasql.postgres()) print(myenv) 同样对于大狼来说,我在lua中尝试了交互模式……我的代码工作得很好. Lua 5.1.5 Copyright (C) 1994-2012 Lua.org,PUC-Rio > pgdb = require("luasql.postgres") > print(pgdb) table: 0x176cb228 > myenv=assert(luasql.postgres()) > print(myenv) PostgreSQL environment (0x176c9d5c) > 所以……这是交互模式下的package.path变量: > print(package.path) ./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua > 这是我原来的测试脚本失败的路径.
解决方法
这是路径的问题.我仍然不确定到底出了什么问题,但我改变了测试脚本中的逻辑:
package.path = '/usr/share/myapp/main.lua;' -- resetting package path manually package.path=package.path ..'./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua “ 至 package.path = package.path .. '/usr/share/myapp/main.lua' -- append to default path. 现在它找到了lua postgres包,让我也可以调用这些函数 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |