heroku:Memcachedを使えるようになるまでにはまったこと

herokuのセッションについては以下のように記載がある。ロードバランサによってアクセスのたびにサーバーが振り分けられるため、セッションが保存されていないサーバーへ振り分けられる=セッション切れを起こす可能性がある。そのため、Memcacheという拡張機能を追加してphpで使えるようにする

セッションは通常、Memcache や Redis などの分散データストアまたはスケーラブルなデータストア、あるいは PostgreSQL や MySQL などのリレーショナルデータベースに保存するのが適しています。

Heroku Dev Center
環境
  • macOS Monterey
  • php8.1

途中、2つのエラーではまる

①composer updateしたら

Root composer.json requires PHP extension ext-memcached * but it is missing from your system. Install or enable PHP's memcached extension.

自分のローカル環境もmemcachesを入れないといけない。

②php -m してもphp.iniに追加したmemcachedがリストアップされない。Warningの解決にはまる。

PHP Warning:  PHP Startup: Unable to load dynamic library 'memcached.so' 

実施したこと

こちらのサイトを参考にほぼ同じように進めた。
1点、「⑨該当のphp.iniファイルに拡張子行を追加する」のステップではphp.iniではなく/usr/local/etc/php/8.1/conf.dに

[memcached]
extension=memcached.so

を加えた。※参考サイトの中の参考サイト(stack overflow)で記載があり。この後②のエラーにはまる。

http://CakePHP3をHerokuでデプロイしたい③

エラーの解決

php.iniのextension_dirを変更したら②が解決。

②を解決できればcomposer updateも通るので①も解決する。

参考サイトの「①ターミナルで「pecl bundle memcached」と打つ」のところでホームディレクトリにmemcachedを追加したのでextension_dirに以下のように設定。

extension_dir = "/Users/xxxxx/memcached/modules/"

xxxxxはPCによって異なる。パスがわからないときはターミナルを立ち上げてフォルダごとドロップすればわかる。これで保存して

php -m

リストの中にmemcachedがあることを確認 → 晴れて

composer update

が通る!herokuにもデプロイ完了。

herokuにアドオンを追加して.user.iniを追加&デプロイすれば終了。(http://Heroku での PHP セッション処理をそのまま実施)

コメント

タイトルとURLをコピーしました