cakephp — использовать memcache для сеансов

#cakephp #memcached

#cakephp #memcached

Вопрос:

Я совсем новичок в cakephp, и у меня возникли проблемы с настройкой его для работы на моем реальном сервере. Он отлично работает на моем локальном компьютере.

Я думаю, проблема в том, что мой живой сервер настроен на использование Memcache. Когда я захожу на живой сайт, я получаю:

 Warning (2): session_start() [function.session-start]: open(=1amp;retry;_interval=15/sess_mt8tpui04vorqojg7s945e5sf5, O_RDWR) failed: No such file or directory (2) [CORE/Cake/Model/Datasource/CakeSession.php, line 615]
Warning (2): session_write_close() [function.session-write-close]: open(=1amp;retry;_interval=15/sess_mt8tpui04vorqojg7s945e5sf5, O_RDWR) failed: No such file or directory (2) [CORE/Cake/Controller/Controller.php, line 712]
Warning (2): session_write_close() [function.session-write-close]: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (tcp://127.0.0.1:11211?persistent=1amp;weight;=1amp;timeout;=1amp;retry;_interval=15) [CORE/Cake/Controller/Controller.php, line 712]
 

Итак, я попытался включить cake для использования memcache, добавив следующее в app/Config/core.php:

 Cache::config('default', array(
    'engine' => 'Memcache'
));
 

Но я все равно получаю ту же ошибку.

Php.ini настроен на правильное использование memcache.

Есть идеи?

Спасибо

Ответ №1:

Ваш Cache::config выглядит неполным!

Это должно выглядеть так, и этот блок кода будет в app/Config/bootstrap.php

 Cache::config('default', array(
          'engine' => 'Memcache', //[required]
          'duration' => 3600, //[optional]
          'probability' => 100, //[optional]
          'prefix' => Inflector::slug(APP_DIR) . '_', //[optional]  prefix every cache file with this string
          'servers' => array(
                  '127.0.0.1:11211' // localhost, default port 11211
          ), //[optional]
          'persistent' => true, // [optional] set this to false for non-persistent connections
          'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory)
  ));
 

Также вам необходимо установить обработчик сеанса http://book.cakephp.org/2.0/en/development/sessions.html#cache-sessions

Мой выглядит так, обратите внимание, что я вызвал «сеансы«, и этот блок кода будет в app/Config/core.php

 Configure::write('Session', array(
        'defaults' => 'cache',
            'handler' => array(
                'config' => 'sessiones'
            ),
        'cookie' => 'PHPSESSID',
        'timeout' => 3600,
        'cookieTimeout' => 0,
        'autoRegenerate' => false,
        'checkAgent' => true,
        'ini' => array(
            'session.cookie_secure' => false,
            'session.cookie_httponly' => true,
        )
    ));
 

А затем настройте Cache:config для обработчика «sessiones»
, и этот блок кода будет в app/Config/bootstrap.php

 Cache::config('sessiones', array('engine' => 'Memcache','duration'=> 3600,/*'prefix' =>'es',*/ 'servers' => array(array('127.0.0.1:11211'), 'compress' => false));
 

Комментарии:

1. 'persistent' => true каково его точное использование? Указывает ли memcached не удалять ключ по истечении срока действия?