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 セッション処理をそのまま実施)
コメント