drupal 7サイトにmemcacheをセットアップしようとしています。memcacheサーバーをセットアップして機能させており、Apacheがそれと通信できるようにsetsebool -P httpd_can_network_memcache 1を使用しています。私はveはまた、ポート11211 tcpがipテーブルで開いていることを確認しました。
Memecache drupal拡張機能をインストールしました。PHPにPECL拡張機能を追加し、phpinfo()を実行すると、memcacheがロードされていることがわかります。
私のdrupal Webサーバー上のsettings.phpには、次のものが含まれています。
/**************************************************
* MEMCACHE
**************************************************/
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
$conf['memcache_servers'] = array(
'memcacheserver.ourdomain.local:11211' => 'cluster'
);
$conf['memcache_bins'] = array(
'bin1' => 'cluster'
);
$conf['memcache_key_prefix'] = 'sdrupal';
しかし、ステータスレポートページに移動すると、次のように表示されます。
Memcache統合Memcache統合は現在ロードされていません。 README.txtをチェックし、memcache.incがsettings.phpで正しく設定されていることを確認します
Readme.txtファイルを繰り返し読みましたが、もちろん、上記でmemcache.incを指定したことがわかります。
Varnishモジュール、またはapcモジュールとcache_backendsも設定されているため、おそらく競合していると思いましたが、その配列なので問題ないと思います。また、コメントアウトしましたが、まだ上記のエラーが表示されます。
また、sites/all/modules/memcache/memcache.incが存在することも確認しました。
drupal memcache.incをロード/検索しないのはなぜですか?
ありがとうブラッド
Memcacheを適切に実行するには、これらの行をsettings.phpファイルに追加する必要があります。
$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
マルチサイトインストールの最上位にいる場合は、これも忘れずに追加してください。
$conf['memcache_key_prefix'] = 'unique_key';
drupalのmemcacheの構成と設定の詳細については、 ここ を参照してください。
これを機能させるには、次の行をコメント化する必要がありました。
//$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
そして追加:
// the path to the core cache file
include_once('./includes/cache.inc');
// the path to the memcache cache file
include_once('./sites/all/modules/memcache/memcache.inc');
なぜこれが必要なのか、何が違うのか知りたいのですが、現時点では機能しているようです。
コマンドを機能させるには、何らかの方法でAPCキャッシュをフラッシュする必要があります。 Apacheを再起動しても問題ありません。フィールドをロードするためにinclude_once()を手動で使用する必要はありません。
私の場合、APCが再起動されるまでキャッシュが期限切れにならないように0に設定されたAPC設定apc.ttlが原因でした。
次の例を確認してください。
/**
* Memcached Configuration
*/
if (class_exists('Memcache') || class_exists('Memcached')) {
// Make memcache the default cache class.
$conf['cache_backends'][] = 'sites/all/modules/contrib/memcache/memcache.inc'; // NOTE: Just verify path where you've memcache module placed.
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = 'drupal_';
// Ensure that the special cache_form bin is assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
// Support for Memcached PECL extension
// This new extension backends to libmemcached
// and allows you to use some of the newer advanced features in memcached 1.4.
if (class_exists('Memcached')) {
// Enable the binary protocol, which is more advanced and faster.
$conf['memcache_options'] = array(
Memcached::OPT_BINARY_PROTOCOL => TRUE,
);
// Memcached takes options directly from Drupal.
$conf['memcache_options'] = array(
Memcached::OPT_COMPRESSION => TRUE, // Turn off compression, as this takes more CPU cycles than its worth for most users.
Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT, // Allows you to add/remove servers easily.
);
}
}
使用しているmemcache拡張機能を自動的に検出し、存在するクラスのみをロードします。さらに、いくつかの一般的な便利なものがあります。
トラブルシューティング:
php -m | grep memcache