Конфигурация кэша CakePHP всегда возвращается к файлу (из Memcache или APC)

Во-первых, и Memcache, и APC успешно установлены с помощью PECL (и проверены как работающие) на моем сервере разработки Macbook Pro с PHP 5.3.15.

Я только что испек тестовое приложение Cake 2.2.2. В Config/core.php у меня есть следующее:

/**
 * Pick the caching engine to use.  If APC is enabled use it.
 * If running via cli - apc is disabled by default. ensure it's available and enabled in this case
 *
 */
$engine = 'File';
if (extension_loaded('apc') && function_exists('apc_dec') && (php_sapi_name() !== 'cli' || ini_get('apc.enable_cli'))) {
    $engine = 'Apc';
}
if (extension_loaded('memcache') && php_sapi_name() !== 'cli') {
    $engine = 'Memcache';
}

// In development mode, caches should expire quickly.
$duration = '+999 days';
if (Configure::read('debug') >= 1) {
    $duration = '+10 seconds';
}

// Prefix each application on the same server with a different string, to avoid Memcache and APC conflicts.
$prefix = 'mcmyapp_';

/**
 * Configure the cache used for general framework caching.  Path information,
 * object listings, and translation cache files are stored with this configuration.
 */
Cache::config('_cake_core_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_core_',
    'path' => CACHE . 'persistent' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration
));

/**
 * Configure the cache for model and datasource caches.  This cache configuration
 * is used to store schema descriptions, and table listings in connections.
 */
Cache::config('_cake_model_', array(
    'engine' => $engine,
    'prefix' => $prefix . 'cake_model_',
    'path' => CACHE . 'models' . DS,
    'serialize' => ($engine === 'File'),
    'duration' => $duration
));


Cache::config('default', array(
    'engine' => $engine,
    'serialize' => ($engine === 'File'),
    'duration'=>$duration,
    'prefix'=>$prefix,
));

debug(Cache::settings());

Вывод вышеописанного окончательного метода отладки():

array(
    'prefix' => '*****',
    'engine' => 'Memcache',
    'serialize' => false,
    'duration' => (int) 10,
    'servers' => array(
        (int) 0 => '127.0.0.1'
    ),
    'compress' => false,
    'persistent' => true,
    'probability' => (int) 100,
    'groups' => array()
)

Таким образом, в core.php кажется, что Cake хочет использовать Memcache для своего механизма кэширования.

Однако, когда я посещаю localhost/myapp/pages/home в своем браузере, меня приветствует свежеиспеченная приветственная страница CakePHP по умолчанию, информирующая меня о том, что The FileEngine is being used for core caching

В любом другом месте моего приложения (кроме core.php), если я debug(Cache::settings()), я получаю следующее:

array(
    'prefix' => '*****',
    'engine' => 'File',
    'serialize' => false,
    'duration' => (int) 10,
    'servers' => array(
        (int) 0 => '127.0.0.1'
    ),
    'compress' => false,
    'persistent' => true,
    'probability' => (int) 100,
    'groups' => array()
)

По сути, CakePHP, кажется, возвращается к файлу для кэширования, игнорируя мою конфигурацию в core.php для использования Memcache... если только я не сделал что-то не так??!

Я пробовал это с Configure::write('debug', 0) и Configure::write('debug', 1).

Я должен упомянуть, что с учетом вышеизложенного в php.ini включены расширения APC и Memcache.

Любая помощь будет принята с благодарностью, заранее спасибо.


person BeesonBison    schedule 09.10.2012    source источник


Ответы (1)


Memcached должен быть на каком-то порту, по умолчанию это 11211 (проверьте)... Итак, ваша конфигурация пытается подключиться к Memcached, терпит неудачу и возвращается к кешу по умолчанию (файлу)...

Пытаться:

Cache::config('default', array(
    'engine' => 'Memcache',
    'duration'=> 3600, 
    'probability'=> 100, 
    'servers' => array('127.0.0.1:11211') <<<<==
));
person B3ro    schedule 20.12.2012