質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

heroku環境でmemcachedのエラー

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 997

score 26

ローカル環境で開発したwebアプリをherokuにデプロイしたところ、ローカルではできていたログインができなく、herokuのログを見ると以下のエラーが出ていました。

Warning: Warning (512): Cache engine Cake\Cache\Engine\MemcachedEngine is not properly configured. in [/app/vendor/cakephp/cakephp/src/Cache/Cache.php, line 178]

設定がうまくできていないみたいなので、設定ファイルを確認しましたが、どこが違うのか見当がつきません。

herokuのドキュメントを見ていたら、プロトコルの設定?のことが書いてあり、これだと思い実行してみましたが変わりませんでした。

開発環境は以下のお通りです。
centos: 6.10
php: 5.6
cakephp: 3.8

よろしくお願いいたします。

//App/config/app_heroku.php
<?php

use Cake\Cache\Engine\FileEngine;
use Cake\Database\Connection;
use Cake\Database\Driver\Mysql;
use Cake\Error\ExceptionRenderer;
use Cake\Log\Engine\FileLog;
use Cake\Mailer\Transport\MailTransport;

$db = parse_url(env('CLEARDB_DATABASE_URL'));

return [

    'debug' => false,


    'App' => [
        'namespace' => 'App',
        'encoding' => env('APP_ENCODING', 'UTF-8'),
        'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
        'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'),
        'base' => false,
        'dir' => 'src',
        'webroot' => 'webroot',
        'wwwRoot' => WWW_ROOT,
        //'baseUrl' => env('SCRIPT_NAME'),
        'fullBaseUrl' => false,
        'imageBaseUrl' => 'img/',
        'cssBaseUrl' => 'css/',
        'jsBaseUrl' => 'js/',
        'paths' => [
            'plugins' => [ROOT . DS . 'plugins' . DS],
            'templates' => [APP . 'Template' . DS],
            'locales' => [APP . 'Locale' . DS],
        ],
    ],


    'Security' => [
      'salt' => env('SALT'),
    ],


    'Asset' => [
        //'timestamp' => true,
        // 'cacheTime' => '+1 year'
    ],

    /**
     * Configure the cache adapters.
     */
    'Cache' => [
      'default' => [
          'className' => 'Memcached',
          'prefix' => 'myapp_cake_',
          'servers' => [env('MEMCACHIER_SERVERS')],
          'username' => env('MEMCACHIER_USERNAME'),
          'password' => env('MEMCACHIER_PASSWORD'),
          'duration' => '+1440 minutes',
      ],

      'session' => [
          'className' => 'Memcached',
          'prefix' => 'myapp_cake_session_',
          'servers' => [env('MEMCACHIER_SERVERS')],
          'username' => env('MEMCACHIER_USERNAME'),
          'password' => env('MEMCACHIER_PASSWORD'),
          'duration' => '+1440 minutes',
      ],

      '_cake_core_' => [
          'className' => 'Memcached',
          'prefix' => 'myapp_cake_core_',
          'servers' => [env('MEMCACHIER_SERVERS')],
          'username' => env('MEMCACHIER_USERNAME'),
          'password' => env('MEMCACHIER_PASSWORD'),
          'duration' => '+1 years',
      ],

      '_cake_model_' => [
          'className' => 'Memcached',
          'prefix' => 'myapp_cake_model_',
          'servers' => [env('MEMCACHIER_SERVERS')],
          'username' => env('MEMCACHIER_USERNAME'),
          'password' => env('MEMCACHIER_PASSWORD'),
          'duration' => '+1 years',
      ],
    ],


    'Error' => [
        'errorLevel' => E_ALL & ~E_USER_DEPRECATED,
        'exceptionRenderer' => ExceptionRenderer::class,
        'skipLog' => [],
        'log' => true,
        'trace' => true,
    ],


    'EmailTransport' => [
        'default' => [
            'className' => MailTransport::class,
            /*
             * The following keys are used in SMTP transports:
             */
            'host' => 'localhost',
            'port' => 25,
            'timeout' => 30,
            'username' => null,
            'password' => null,
            'client' => null,
            'tls' => null,
            'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
        ],
    ],


    'Email' => [
        'default' => [
            'transport' => 'default',
            'from' => 'you@localhost',
            //'charset' => 'utf-8',
            //'headerCharset' => 'utf-8',
        ],
    ],


    'Datasources' => [
      'default' => [
          'className' => 'Cake\Database\Connection',
          'driver' => 'Cake\Database\Driver\Mysql',
          'persistent' => false,
          'host' => $db['host'],
          'username' => $db['user'],
          'password' => $db['pass'],
          'database' => substr($db['path'], 1),
          'encoding' => 'utf8',
          'timezone' => '+9:00',
          'cacheMetadata' => true,
          'quoteIdentifiers' => false,
      ],
    ],

    /**
     * Configures logging options
     */
    'Log' => [
      'debug' => [
          'className' => 'Cake\Log\Engine\ConsoleLog',
          'stream' => 'php://stdout',
          'levels' => ['notice', 'info', 'debug'],
      ],
      'error' => [
          'className' => 'Cake\Log\Engine\ConsoleLog',
          'stream' => 'php://stderr',
          'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
      ],
    ],

    'Session' => [
      'defaults' => 'cache',
      'handler' => [
          'config' => 'session'
      ]
    ]
];
<?php
//App/config/bootstrap.php
/*
 * Configure paths required to find CakePHP + general filepath constants
 */
require __DIR__ . '/paths.php';


require CORE_PATH . 'config' . DS . 'bootstrap.php';

use Cake\Cache\Cache;
use Cake\Console\ConsoleErrorHandler;
use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;
use Cake\Core\Plugin;
use Cake\Database\Type;
use Cake\Datasource\ConnectionManager;
use Cake\Error\ErrorHandler;
use Cake\Http\ServerRequest;
use Cake\Log\Log;
use Cake\Mailer\Email;
use Cake\Mailer\TransportFactory;
use Cake\Utility\Inflector;
use Cake\Utility\Security;


try {
    Configure::config('default', new PhpConfig());
    Configure::load('app', 'default', false);
} catch (\Exception $e) {
    exit($e->getMessage() . "\n");
}


//Configure::load('app_local', 'default');
if (isset($_ENV['CAKE_ENV'])) {
    Configure::load('app_' . $_ENV['CAKE_ENV'], 'default');
}

/*
 * When debug = true the metadata cache should only last
 * for a short time.
 */
if (Configure::read('debug')) {
    Configure::write('Cache._cake_model_.duration', '+2 minutes');
    Configure::write('Cache._cake_core_.duration', '+2 minutes');
    // disable router cache during development
    Configure::write('Cache._cake_routes_.duration', '+2 seconds');
}


date_default_timezone_set('Asia/Tokyo');

/*
 * Configure the mbstring extension to use the correct encoding.
 */
mb_internal_encoding(Configure::read('App.encoding'));


ini_set('intl.default_locale', Configure::read('App.defaultLocale'));

/*
 * Register application error and exception handlers.
 */
$isCli = PHP_SAPI === 'cli';
if ($isCli) {
    (new ConsoleErrorHandler(Configure::read('Error')))->register();
} else {
    (new ErrorHandler(Configure::read('Error')))->register();
}

/*
 * Include the CLI bootstrap overrides.
 */
if ($isCli) {
    require __DIR__ . '/bootstrap_cli.php';
}

/*
 * Set the full base URL.
 * This URL is used as the base of all absolute links.
 *
 * If you define fullBaseUrl in your config file you can remove this.
 */
if (!Configure::read('App.fullBaseUrl')) {
    $s = null;
    if (env('HTTPS')) {
        $s = 's';
    }

    $httpHost = env('HTTP_HOST');
    if (isset($httpHost)) {
        Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost);
    }
    unset($httpHost, $s);
}

Cache::setConfig(Configure::consume('Cache'));
ConnectionManager::setConfig(Configure::consume('Datasources'));
TransportFactory::setConfig(Configure::consume('EmailTransport'));
Email::setConfig(Configure::consume('Email'));
Log::setConfig(Configure::consume('Log'));
Security::setSalt(Configure::consume('Security.salt'));

/*
 * The default crypto extension in 3.0 is OpenSSL.
 * If you are migrating from 2.x uncomment this code to
 * use a more compatible Mcrypt based implementation
 */
//Security::engine(new \Cake\Utility\Crypto\Mcrypt());

/*
 * Setup detectors for mobile and tablet.
 */
ServerRequest::addDetector('mobile', function ($request) {
    $detector = new \Detection\MobileDetect();

    return $detector->isMobile();
});
ServerRequest::addDetector('tablet', function ($request) {
    $detector = new \Detection\MobileDetect();

    return $detector->isTablet();
});

/*
 * Enable immutable time objects in the ORM.
 *
 * You can enable default locale format parsing by adding calls
 * to `useLocaleParser()`. This enables the automatic conversion of
 * locale specific date formats. For details see
 * @link https://book.cakephp.org/3.0/en/core-libraries/internationalization-and-localization.html#parsing-localized-datetime-data
 */
Type::build('time')
    ->useImmutable();
Type::build('date')
    ->useImmutable();
Type::build('datetime')
    ->useImmutable();
Type::build('timestamp')
    ->useImmutable();
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • nojimage

    2019/11/13 14:21

    php で memcached拡張は有効ですか?

    キャンセル

  • tunnel

    2019/11/14 16:28

    herokuのドキュメントにmemcachedは自動で有効になるとの記載がありました。他にも気になることございましたら何なりとご指摘ください。お願いいたします<(__)>

    キャンセル

  • nojimage

    2019/11/15 10:23

    出ている例外から、memcached拡張が有効でない、memcachedサーバーに接続できていないのいずれかが原因です。確認ですが、MEMCACHIER_SERVERSの環境変数は、適切にセットしていますか?

    キャンセル

  • tunnel

    2019/11/15 13:27

    heroku configで確認しましたが、セットされていました。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る