RedisException
MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. RedisException thrown with message "MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error." Stacktrace: #9 RedisException in /home/deploy/EHungry-11-boyan/Web/classes/Cache.class.php:69 #8 Redis:setex in /home/deploy/EHungry-11-boyan/Web/classes/Cache.class.php:69 #7 Cache:Set in /home/deploy/EHungry-11-boyan/Web/classes/Cache.class.php:57 #6 Cache:SetArray in /home/deploy/EHungry-11-boyan/Web/classes/DbFields.php:53 #5 DbFields:getFields in /home/deploy/EHungry-11-boyan/Web/classes/BaseClass.class.php:524 #4 BaseClass:getAttribute in /home/deploy/EHungry-11-boyan/PHP/vendor/illuminate/database/Eloquent/Model.php:1279 #3 Illuminate\Database\Eloquent\Model:__get in /home/deploy/EHungry-11-boyan/Web/classes/BaseClass.class.php:421 #2 BaseClass:__call in /home/deploy/EHungry-11-boyan/Web/templates3.0/customer/header.php:98 #1 include_once in /home/deploy/EHungry-11-boyan/Web/controllers/customer.php:867 #0 require in /home/deploy/EHungry-11-boyan/Web/index.php:30
Stack frames (10)
9
RedisException
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
69
8
Redis
setex
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
69
7
Cache
Set
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
57
6
Cache
SetArray
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
DbFields.php
53
5
DbFields
getFields
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
BaseClass.class.php
524
4
BaseClass
getAttribute
/
vendor
/
illuminate
/
database
/
Eloquent
/
Model.php
1279
3
Illuminate
\
Database
\
Eloquent
\
Model
__get
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
BaseClass.class.php
421
2
BaseClass
__call
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
templates3.0
/
customer
/
header.php
98
1
include_once
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
controllers
/
customer.php
867
0
require
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
index.php
30
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
    }
 
    public static function SetObject($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetArray($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetBoolean($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function Set($key, $var, $expire = 86400) {
        App::debugbarLog('debug', "Cache set: $key");
        if ($i = static::getInstance()) {
            $var = static::beforeSet($var);
            return $expire > 0?
                $i->setEx($key, $expire, $var) :
                $i->set($key, $var);
        }
        return null;
    }
 
    public static function Exists(...$key):?bool {
        if ($i = static::getInstance()) {
            return $i->exists($key);
        }
        return null;
    }
 
    public static function Expire($key, $ttl) {
        if ($i = static::getInstance()) {
            return $i->expire($key, $ttl);
        }
        return false;
    }
 
    /**
Arguments
  1. "MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error."
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
    }
 
    public static function SetObject($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetArray($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetBoolean($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function Set($key, $var, $expire = 86400) {
        App::debugbarLog('debug', "Cache set: $key");
        if ($i = static::getInstance()) {
            $var = static::beforeSet($var);
            return $expire > 0?
                $i->setEx($key, $expire, $var) :
                $i->set($key, $var);
        }
        return null;
    }
 
    public static function Exists(...$key):?bool {
        if ($i = static::getInstance()) {
            return $i->exists($key);
        }
        return null;
    }
 
    public static function Expire($key, $ttl) {
        if ($i = static::getInstance()) {
            return $i->expire($key, $ttl);
        }
        return false;
    }
 
    /**
Arguments
  1. "describe_template_account_setting_1"
    
  2. 86400
    
  3. "a:7:{s:2:"id";s:1:"N";s:8:"key_name";s:1:"S";s:5:"value";s:1:"S";s:10:"account_id";s:1:"N";s:10:"created_at";s:2:"DT";s:11:"modified_at";s:2:"DT";s:11:"template_id";s:1:"N";}"
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
Cache.class.php
                if (!@static::$redisObj->connect(static::$host, (int)static::$port)) {
                    static::$redisObj = false;
                    Splunk::log(Splunk::LOG_REDIS_CONN, ['error' => 'Error connecting']);
                } else {
                    static::$redisObj->select(static::$db);
                }
            } catch (RedisException $e) {
                static::$redisObj = false;
                Splunk::log(Splunk::LOG_REDIS_CONN, ['error' => 'Error connecting: '.$e->getMessage()]);
            }
        }
        return static::$redisObj;
    }
 
    public static function SetObject($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetArray($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function SetBoolean($key, $var, $expire = 86400) {
        return static::Set($key, serialize($var), $expire);
    }
 
    public static function Set($key, $var, $expire = 86400) {
        App::debugbarLog('debug', "Cache set: $key");
        if ($i = static::getInstance()) {
            $var = static::beforeSet($var);
            return $expire > 0?
                $i->setEx($key, $expire, $var) :
                $i->set($key, $var);
        }
        return null;
    }
 
    public static function Exists(...$key):?bool {
        if ($i = static::getInstance()) {
            return $i->exists($key);
Arguments
  1. "describe_template_account_setting_1"
    
  2. "a:7:{s:2:"id";s:1:"N";s:8:"key_name";s:1:"S";s:5:"value";s:1:"S";s:10:"account_id";s:1:"N";s:10:"created_at";s:2:"DT";s:11:"modified_at";s:2:"DT";s:11:"template_id";s:1:"N";}"
    
  3. 86400
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
DbFields.php
        $this->table = $table;
    }
 
    public function getFields($withTypes = false):array {
        //FIXME: workaround for BaseClass objects that are not present in the database. check BaseClass::NO_TABLE
        if (!$this->table) {
            return [];
        }
        if (!$this->typesCache) { //not in the local cache, let's fetch it
            $cacheKey = "describe_{$this->table}_1"; //this "1" meant "include ID" in the old code
 
            //TODO: replace with Cache::Remember
            $this->typesCache = Cache::GetArray($cacheKey);
            if (!$this->typesCache || self::SKIP_CACHE) { //not in the cache either, let's generate it
                $this->typesCache = collect(DB::select("DESCRIBE $this->table"))
                                        ->pluck('Type', 'Field')
                                        ->transform(['DbFields','simplifyType'])
                                        ->all();
 
                Cache::SetArray($cacheKey, $this->typesCache);
            }
        }
 
        if (!$this->fieldsCache && !$withTypes) {
            $this->fieldsCache = array_keys($this->typesCache);
        }
 
        return $withTypes? $this->typesCache : $this->fieldsCache;
    }
 
    /**
     * Separates all attributes into custom and pure fields (those present on the database table).
     * @param array $values
     * @return array 0 => custom fields, 1 => pure fields
     */
    public function splitCustom(array $values) {
        $tableFields = array_flip($this->getFields());
        $customFields = array_diff_key($values, $tableFields);
        $pureFields = array_intersect_key($values, $tableFields);
 
Arguments
  1. "describe_template_account_setting_1"
    
  2. array:7 [
      "id" => "N"
      "key_name" => "S"
      "value" => "S"
      "account_id" => "N"
      "created_at" => "DT"
      "modified_at" => "DT"
      "template_id" => "N"
    ]
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
BaseClass.class.php
 
    /**
     * Sets the updated_at field, with a backport of the 5.5+ behavior for disabling that field.
     * @param mixed $value
     * @return EloquentModel
     */
    public function setUpdatedAt($value) {
        if (static::UPDATED_AT) {
            parent::setAttribute(static::UPDATED_AT, $value);
        }
        return $this;
    }
 
    public function getAttribute($key) {
        //first we check for mutated getters
        if ($getter = $this->findAnyGetMutator($key)) {
            return $this->$getter();
        }
 
        if (in_array($key, $this->fields()->getFields()) || array_key_exists($key, $this->attributes)) {
            //this is an existing database field or came from a custom query, so let's get it as an attribute
            return parent::getAttribute($key);
        } elseif ($this->relationLoaded($key) || method_exists($this, $key)) {
            //this is a relationship method, skipped at getAttribute() by the last if-clause, so let's call it here
            try {
                return $this->getRelationValue($key);
            } catch (LogicException $e) {
                throw new LogicException('You probably forgot to *return* from your relation method - or accidentally triggered a relation getter where you shouldn\'t', $e->getCode(), $e);
            }
        } elseif (property_exists($this, $key)) {
            //support for legacy getter of custom props
            return $this->$key;
        } else {
            //probably a custom prop (sometimes used in legacy code), so let's get it directly from the object as usual
            //this causes a small side-effect where isset() can't be used with undeclared custom props; property_exists() should be used instead (actually, they should be declared lol)
            if (DevLevel > 0) {
                trigger_error('Custom property got from '.static::class.": $key", E_USER_NOTICE);
            }
            return $this->$key;
        }
/
home
/
deploy
/
EHungry-11-boyan
/
PHP
/
vendor
/
illuminate
/
database
/
Eloquent
/
Model.php
     *
     * @param  int  $perPage
     * @return $this
     */
    public function setPerPage($perPage)
    {
        $this->perPage = $perPage;
 
        return $this;
    }
 
    /**
     * Dynamically retrieve attributes on the model.
     *
     * @param  string  $key
     * @return mixed
     */
    public function __get($key)
    {
        return $this->getAttribute($key);
    }
 
    /**
     * Dynamically set attributes on the model.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return void
     */
    public function __set($key, $value)
    {
        $this->setAttribute($key, $value);
    }
 
    /**
     * Determine if the given attribute exists.
     *
     * @param  mixed  $offset
     * @return bool
     */
Arguments
  1. "value"
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
classes
/
BaseClass.class.php
     * @param string $func
     * @param array  $args
     * @return mixed|null If setXyz() is called, it will return the final stored format. Otherwise, returns what's
     * recovered from getXyz() or whatever the resulting magic method should return.
     */
    public function __call($func, $args) {
        $action = substr($func, 0, 3);
 
        $prop = snake_case(substr($func, 3));
        //we need to extend snake_case() result to consider numbers as boundaries too..... for most cases :|
        if (!preg_match('/(^street|note|freepos_tax)\d/', $prop)) {
            $prop = preg_replace('/(.)(?=\d)/u', '$1_', $prop);
        }
 
        switch ($action) {
            case 'set':
                $this->__set($prop, $args[0]);
                return $this->__get($prop);
            case 'get':
                return $this->__get($prop);
            case 'iss':
                return isset($this->attributes[$prop]);
        }
 
        try {
            return parent::__call($func, $args);
        } catch (BadMethodCallException $e) {
            trigger_error('Invalid method called: '.get_class($this)."::$func()", E_USER_WARNING);
            return null;
        }
    }
 
    /**
     * Checks for either legacy or Laravel-style mutators (setField() or getFieldAttribute()).
     * @param string $getSet either 'get' or 'set'
     * @param string $key
     * @return string
     */
    private function findAnyMutator($getSet, $key):string {
        $base = $getSet.studly_case($key);
Arguments
  1. "value"
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
templates3.0
/
customer
/
header.php
                $metaDescription = str_replace('{LOCATION}', $restaurant->getCity().', '.$restaurant->getState(), $metaDescription);
                $metaDescription = str_replace('{CUISINE}', $restaurant->getCuisineType(), $metaDescription);
                $metaDescription = str_replace('{ORDER_TYPES}', $restaurant->getOrderTypeText(), $metaDescription);
            } else {
                $metaDescription = str_replace(' in {LOCATION}', '', $metaDescription);
                $metaDescription = str_replace('{CUISINE}', '', $metaDescription);
                $metaDescription = str_replace('{ORDER_TYPES}', '', $metaDescription);
            }
            $metaDescription = str_replace('{ACCOUNT_NAME}', $account->getDisplayName(), $metaDescription);
 
            echo '<meta name="description" content="'.HS($metaDescription).'" />';
        } ?>
        <?=(is_object($account)?'<meta name="keywords" content="'.htmlentities($account->getMetaKeywords()).'" />':'')?>
 
        <? foreach (\EDS\Portal::getPageMetadata() as $portalMetaData) { ?>
            <?= $portalMetaData ?>
        <? }
 
        if (isset($_REQUEST['_TEMPLATE_SETTINGS']['favicon_image'])) {
            $ext = pathinfo($_REQUEST['_TEMPLATE_SETTINGS']['favicon_image']->getValue(), PATHINFO_EXTENSION);
            $all_ext = ['jpg', 'png', 'gif', 'ico'];
            if (in_array($ext, $all_ext)) {
                if ($ext == 'jpg') {
                    $ext = 'jpeg';
                } elseif ($ext == 'ico') {
                    $ext = 'x-icon';
                } ?>
                <link rel="shortcut icon" href="<?=$_REQUEST['_TEMPLATE_SETTINGS']['favicon_image']->getUrl()?>" type="image/<?=$ext?>" />
            <? }
        } ?>
 
        <meta property="og:type" content="website">
        <meta property="og:title" content="<?=$title?>">
        <meta property="og:description" content="<?=HS($metaDescription)?>">
 
        <meta name="twitter:card" content="summary_large_image">
        <meta name="twitter:title" content="<?=$title?>">
        <meta name="twitter:description" content="<?=HS($metaDescription)?>">
        <?
        $openGraphImage = null;
Arguments
  1. "getValue"
    
  2. []
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
controllers
/
customer.php
}
 
if (!isset($cart) || !is_object($cart)) {
    $GLOBALS['cart'] = \Cart::getCurrent();
}
 
//unset callback data in the event someone didn't hit the callback validation page
if (!in_array($_REQUEST['form'], ['checkout', 'nosuchpage', 'validatecallback', 'viewdeliveryzone'])) {
    //TODO: probably need to add one more form here that is called ajax, callback seems to reset when it shouldnt
    unset($_SESSION['validation_data']);
}
 
$locs = $account->getActiveRestaurants('position');
$tab = MainNavigationTab::getAllForAccount($account->getId());
 
include_once(CORE_PATH.'lib/helpers/customer3.0.php');
 
if (!in_array($_REQUEST['form'], $viewContentOnly)) {
    App::debugbarTime('header');
    include_once(getLayoutPartPath('header'));
    App::debugbarTime('header');
}
 
App::debugbarTime("view '{$_REQUEST['form']}'");
$path = CORE_PATH.'view' . ($_REQUEST['_VERSION'] == 4 ? 4 : 3) . '.0/customer/'.$_REQUEST['form'].'.php';
if (is_readable($path)) {
    include_once($path);
}
App::debugbarTime("view '{$_REQUEST['form']}'");
 
if (!in_array($_REQUEST['form'], $viewContentOnly)) {
    App::debugbarTime('footer');
    include_once(getLayoutPartPath('footer'));
    App::debugbarTime('footer');
}
 
function getLayoutPartPath($part) {
    if (isset($_REQUEST['_CORDOVA_APP'])) {
        $cart = Cart::getCurrent();
 
Arguments
  1. "/home/deploy/EHungry-11-boyan/Web/templates3.0/customer/header.php"
    
/
home
/
deploy
/
EHungry-11-boyan
/
Web
/
index.php
App::startTime();
 
ErrorHandlers::register();
 
// Global.php is the core setup file for the application
App::debugbarTime('Global.php');
require(dirname(__DIR__) . '/PHP/Global.php');
App::debugbarTime('Global.php');
/** @var string $controller The main controller - defined at /PHP/Global.php */
 
App::debugbarTime('Sentry - controller');
ErrorHandlers::sentryInit($controller); //doesn't always do much - not every controller has a Sentry project
App::debugbarTime('Sentry - controller');
 
App::debugbarTime("controller: $controller");
apache_note('AppController', $controller);
if (file_exists(CORE_PATH."lib/helpers/$controller.php")) {
    require CORE_PATH."lib/helpers/$controller.php";
}
require CORE_PATH."controllers/$controller.php";
App::debugbarTime("controller: $controller");
 
Arguments
  1. "/home/deploy/EHungry-11-boyan/Web/controllers/customer.php"
    

Environment & details:

Key Value
aid
"restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
empty
empty
Key Value
PHPSESSID
"rjlq5e2l3dem9qmh8qvs4tomv9"
Key Value
loc
"en_US"
customer_account_id
66516
cart
Cart {}
restaurant_id
7721
menu_id
9843
Key Value
UNIQUE_ID
"aX7FNjgOpzA4Xlty51kJmgAAAAc"
SCRIPT_URL
"/restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
SCRIPT_URI
"http://www.springroll.com.11.boyan.ehungry.net/restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
HTTP_HOST
"www.springroll.com.11.boyan.ehungry.net"
HTTP_X_REAL_IP
"216.73.216.34"
HTTP_X_FORWARDED_FOR
"216.73.216.34"
HTTP_X_CONFKEY
"Main_Domain:6462"
HTTP_SCHEME
"https"
HTTP_EHENV
"TODO"
HTTP_CONNECTION
"close"
HTTP_ACCEPT
"*/*"
HTTP_USER_AGENT
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
HTTP_ACCEPT_ENCODING
"gzip, br, zstd, deflate"
HTTP_COOKIE
"PHPSESSID=rjlq5e2l3dem9qmh8qvs4tomv9"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
SERVER_SIGNATURE
""
SERVER_SOFTWARE
"Apache/2.4.66 () mod_wsgi/4.6.5 Python/3.7 PHP/7.2.34"
SERVER_NAME
"www.springroll.com.11.boyan.ehungry.net"
SERVER_ADDR
"127.0.0.1"
SERVER_PORT
"80"
REMOTE_ADDR
"127.0.0.1"
DOCUMENT_ROOT
"/home/deploy/EHungry-11-boyan/Web"
REQUEST_SCHEME
"http"
CONTEXT_PREFIX
""
CONTEXT_DOCUMENT_ROOT
"/home/deploy/EHungry-11-boyan/Web"
SERVER_ADMIN
"root@localhost"
SCRIPT_FILENAME
"/home/deploy/EHungry-11-boyan/Web/index.php"
REMOTE_PORT
"42800"
GATEWAY_INTERFACE
"CGI/1.1"
SERVER_PROTOCOL
"HTTP/1.0"
REQUEST_METHOD
"GET"
QUERY_STRING
"aid=restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
REQUEST_URI
"/restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
SCRIPT_NAME
"/restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
PHP_SELF
"/restaurant/greatwalldoylestown/order/main/vegetable/58a-sesame-tofu"
REQUEST_TIME_FLOAT
1769915702.13
REQUEST_TIME
1769915702
empty
0. Whoops\Handler\PrettyPageHandler

Fatal error: Uncaught RedisException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0