web-dev-qa-db-ja.com

MemcacheとVarnishの両方でDrupal 7 settings.phpを設定する

VarnishとMemcachedの両方を使用するのが初めてです。いくつかのコピーアンドペーストインストールガイドに従っています。

両方のサーバーをインストールして実行しています。 Memcachedは正常に動作しているようです。 Varnishはページを提供していますが、キャッシュミスがたくさんあります。 Drupalモジュールを有効にしてVarnishがページやCSSなどをキャッシュすることを認識できるようにしています。

ただし、VarnishモジュールのREADME.txtファイルからsettings.phpスニペットを自分のsettings.phpにコピーすると、ホワイトページが表示され、Apacheエラーログに次のメッセージが表示されます。

PHP Fatal error:  Class 'MemCacheDrupal' not found in /var/www/myhost/includes/cache.inc on line 31

これが私のsettings.phpに追加されたキャッシュセクションです。 MemCachedで上記のエラーが発生するため、ワニス部分はコメント化されています。

# Memcache
$conf['cache_backends'][] = 'sites/all/modules/contrib/memcache/memcache.inc';
// The 'cache_form' bin must be assigned no non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = 'myhost';
# Varnish
// Add Varnish as the page cache handler.
#$conf['cache_backends'][] = array('sites/all/modules/contrib/varnish/varnish.cache.inc');
#$conf['cache_class_cache_page'] = 'VarnishCache';
// Drupal 7 does not cache pages when we invoke hooks during bootstrap.
// This needs to be disabled.
#$conf['page_cache_invoke_hooks'] = FALSE;

Varnishスニペットまたは私の設定全般の何が問題になっていますか?

Memcachedの行の前にVarnishの行を並べ替えてみましたが、次のエラーが発生しました。

PHP Fatal error:  require_once(): Failed opening required '/var/www/myhost/Array' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/myhost/includes/bootstrap.inc on line 2308
1
lolcode

少し後でわかりました。私がコピーして貼り付けた2つのソースで異なるのは、配列フォーマットだけでした。問題は次のとおりです。

#$conf['cache_backends'][] = array('sites/all/modules/contrib/varnish/varnish.cache.inc');

そのはず:

#$conf['cache_backends'][] = 'sites/all/modules/contrib/varnish/varnish.cache.inc';
3
lolcode

私は同じ問題を抱えていて、私の「解決策」は、あなたの解決策であった行を変更せずに注文設定を変更することでした:

  1. ワニス
  2. Memcache

私の設定(Drupal 7.34、Varnish 3、Memcache 3.8.0):

// Varnish
// Add Varnish as a cache bin.
$conf['cache_backends'] = array('sites/all/modules/contrib/varnish/varnish.cache.inc');

//If you plan to use the expire module to be selective with your cache clearing you should add as a new cache bin.

//$conf['cache_class_external_varnish_page'] = 'VarnishCache';

// If you are not going to use the expire module you should replace the default pagecache with varnish.

$conf['cache_class_cache_page'] = 'VarnishCache';

// Memcache
$conf['cache_backends'][] = 'sites/all/modules/contrib/memcache/memcache.inc';
$conf['lock_inc'] = 'sites/all/modules/contrib/memcache/memcache-lock.inc';
$conf['memcache_stampede_protection'] = TRUE;
$conf['cache_default_class'] = 'MemCacheDrupal';

// The 'cache_form' bin must be assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

// Don't bootstrap the database when serving pages from the cache.
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;

//Note that no servers or bins are defined.  The default server and bin
//configuration which is used in this case is equivalant to setting:

$conf['memcache_servers'] = array('localhost:11211' => 'default');
0
pslcbs