【发布时间】:2019-03-24 02:16:04
【问题描述】:
我有一个带有如下代码块的 lua 脚本:
local call_data = cjson.decode(ARGV[1])
local other_data = cjson.decode(ARGV[2])
local data = {}
local next = next
local populate_data = function(source)
if next(source) == nil then
return
end
for property,value in pairs(source) do
redis.call('HSET', KEYS[2], property, value)
end
end
populate_data(call_data)
populate_data(other_data)
当我尝试使用以下命令 KEYS 和 ARGV 运行脚本时:-
redis-cli --eval dialed.lua "inflight_stats:18" "calls:AC443d7a8111a96ba8074f54a71f0521ce:CA1ec49703eee1959471c71506f43bb42e:dialed" , "{\"from\":\"+18035224181\",\"to\":\"+919943413333\",\"sid\":\"CA1ec49703eee1959471c71506f43bb42e\",\"status\":\"queued\",\"direction\":\"outbound-api\",\"date_created\":null,\"account_sid\":\"AC443d8a8111a96ba8074f54a71f0521ce\"}" "{\"phone\":\"919943413333\",\"campaign_id\":18,\"caller_session_sid\":\"CA828b163153bf5cc301ef5285e38925f9\"}" 0
错误:-
(error) ERR Error running script (call to f_08dcc69ee8baa0200e0cf552948ab4bc338c9978): @user_script:11: @user_script: 11: Lua redis() command arguments must be strings or integers
【问题讨论】:
-
你可以使用:./redis-cli --ldb --eval /tmp/script.lua mykey somekey , arg1 arg2
-
@gliatsos 请检查上述说明一次。我已经在做同样的测试了
-
运行此脚本返回 (nil)。因为你没有打电话给
populate_data,所以我看不到你是怎么到第11行的。 -
@ItamarHaber 是的,由于一些私人问题,我没有提到调用对 pupulate_data 的引用,但是是的,它已被调用。我认为这与 lightuserdata 相关,因为 'value' 获得 'light-userdata@(nil)' 但不确定如何识别这个 'value' 等于 nil
-
@ItamarHaber 您在 Lua 脚本方面拥有丰富的经验,如果您能帮助我解决这个问题,我将不胜感激。