2016-09-13 18 views
1

私のnode.jsプロジェクト用にいくつかのluaスクリプトを書いています。私のルアスクリプトの中には同じコードがあります。最初に説明しましょう。別のluaスクリプトからluaスクリプトをロード

私の最初のスクリプトは、指定されたキーのすべてのデータをredisから返します。

script1.lua

local data = {}; 
local keyslist = redis.call('keys', 'day:*'); 
local key, redisData; 
for iCtr = 1, #keyslist do 
    key = string.gsub(keyslist[iCtr], 'day:',''); 

    redisData = redis.call('hmget', keyslist[iCtr], 'users'); 
    table.insert(data, {date=key, users=redisData[1]}); 
end 
return cjson.encode(data); 

私の2番目のスクリプトは、Redisのから同じキーからトップ2のレコードを返します。

local data = {}; 
local keyslist = redis.call('keys', 'day:*'); 
local key, redisData; 
for iCtr = 1, #keyslist do 
    if iCtr < 3 
     key = string.gsub(keyslist[iCtr], 'day:',''); 

     redisData = redis.call('hmget', keyslist[iCtr], 'users'); 
     table.insert(data, {date=key, users=redisData[1]}); 
    end  
end 
return cjson.encode(data); 

script2.luaは今、次のように同じようscript2.luaからscript1.luaを呼び出したいです。

私は、コードの上にしようとしたscript2.lua(フォローなどのようにしたい)

local file = assert(loadfile("script1.lua")); 
return file(2) -- return only top 2 records where needed. 
       -- some forLoop logic will be change as per about need. 

が、それ以下のエラー

Script attempted to access unexisting global variable 'loadfile' 

私の貧弱な説明のために申し訳ありませんて。

+0

どのようにLuaのスクリプトを実行しているこのプロジェクトを試してみてください? – hjpotter92

+0

@ hjpotter92 luaScriptManagerを使用しています luaScriptManager.loadFromDir(path + '/script2.lua'); –

+0

Redisでは、(正式に)別のスクリプトからスクリプトを呼び出すことはできません。 –

答えて

2

これはでRedisの問題

ルックです: https://redislabs.com/ebook/redis-in-action/part-3-next-steps-3/chapter-11-scripting-redis-with-lua/11-1-adding-functionality-without-writing-c/11-1-1-loading-lua-scripts-into-redis

、ここ

http://redis.io/commands/script-load

ret_1 = script_load( "1を返す")

ret_1( conn)

1L

あなたのケースでは、スクリプトは、「ロードファイル」はどういう意味を理解していません。

またはhttps://github.com/anvaka/redis-load-scripts

+0

まだエラーがあります:スクリプトが存在しないグローバル変数 'script_load'にアクセスしようとしました –

+0

https://github.com/anvaka/redis-load-scriptsこのプロジェクトを試してください – Vyacheslav

関連する問題