ERR Lua script attempted to access nonexistent global variable: Lua script attempted to access a nonexistent global variable
RedisNe demek?
EVAL/EVALSHA ile çalıştırılan Lua betiği, tanımlı olmayan bir global değişkene erişmeye çalıştı. Redis, betik ortamını korumak için genel değişken oluşturmayı/okumayı kısıtlar ve bu erişimi hata olarak döndürür.
Neden olur?
Betikte yerel (local) yerine yanlışlıkla global değişken kullanmak (local anahtar kelimesini unutmak); yazım hatası nedeniyle tanımsız bir isme erişmek; ya da global bir değişken üzerinden durum saklamaya çalışmak. Redis'in korumalı Lua ortamı bunlara izin vermez.
Nasıl çözülür?
Betikteki tüm değişkenleri local ile tanımlayın: local x = ... Yazım hatalarını düzeltin; kullanmadan önce her değişkenin tanımlandığından emin olun. Betikler durumsuz (stateless) olmalı; kalıcı durum için Redis anahtarlarını (KEYS/redis.call) kullanın, global Lua değişkenleri değil. Betiği kısa ve deterministik tutun.
Aynı motorda diğer kayıtlar
- NOPROTO unsupported protocol versionUnsupported RESP protocol version
- ERR Unknown option or number of arguments for CONFIG SETUnknown option or number of arguments for CONFIG SET (eski sürümlerde: Unsupported CONFIG parameter)
- ERR MULTI calls can not be nestedMULTI calls can not be nested
- ERR unknown commandUnknown command
- TRYAGAIN Multiple keys request during rehashing of slotMultiple keys request during rehashing of slot (cluster)
- ERR DISCARD without MULTIDISCARD without MULTI
- BUSYGROUP Consumer Group name already existsConsumer group already exists