web-dev-qa-db-ja.com

Memcache統合がロードされていません

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をロード/検索しないのはなぜですか?

ありがとうブラッド

4
Brad

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の構成と設定の詳細については、 ここ を参照してください。

1
Rootical V.

これを機能させるには、次の行をコメント化する必要がありました。

//$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');

なぜこれが必要なのか、何が違うのか知りたいのですが、現時点では機能しているようです。

0
Brad

コマンドを機能させるには、何らかの方法でAPCキャッシュをフラッシュする必要があります。 Apacheを再起動しても問題ありません。フィールドをロードするためにinclude_once()を手動で使用する必要はありません。

私の場合、APCが再起動されるまでキャッシュが期限切れにならないように0に設定されたAPC設定apc.ttlが原因でした。

0
asiby

次の例を確認してください。

/**
 * 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拡張機能を自動的に検出し、存在するクラスのみをロードします。さらに、いくつかの一般的な便利なものがあります。


トラブルシューティング:

  • memcacheモジュールが有効になっていることを確認します。
  • / admin/reports/status/phpに移動し、memcacheまたはmemcachedというセクションがあることを確認します(そうでない場合は、適切にインストールし、ログを確認します)。
  • コマンドラインを使用する場合は、次の方法でmemcacheを確認してください:php -m | grep memcache
  • まだ問題がある場合は、/ admin/reports/statusを確認してください。
  • memcachedが稼働していることを確認してください。
0
kenorb