今回のプロジェクトでは、導入しやすいKey-Value-Storeを用いたいので、Redisを選択。
>redis-cli ping
PONG
これはいけたので(また別件でハマってたんですけどね)、PHPで動くようにredisパッケージをインストールして動くようにしたい。
しかしここで大ハマリ。その顛末と解決策まとめ…
欲しい情報は顛末の経緯じゃなくて、解決策!それさえあれば快傑ズバット。「ヒュ〜ゥ、チッチッチ」のあの名シーンのように。
#まずは、こんな感じでハマったんでしょ?
ウェブ上にアップされているいろいろな情報を模索して、いろんなリポジトリを設定して放り込んでいくうちに、
パッケージの相互の整合性がとれなくなってくるのでしょうか?インストールできない状態になりがち。
そこで無理やりやろうとして
>sudo yum -y install php70-php-pecl-redis.x86_64
これを実行して、インストールできた気になって、php.ini
の最後の行にこれ書いて
extension=redis.so
サービスをリスタートして
>sudo systemctl restart httpd.service
これで解決しめしめと思って、
<?=phpinfo()?>
これで確認しても「redisがない。」とすっかりハマってませんでしたか?
なぜそうなるか正確には僕にはわかりませんが、redis.soがうまく認識されないからだと予測をたてました。
モダンなPHPはパッケージを読み込むファイルを
/etc/php.d/.にまとめています。だからといって、そこにredis.iniファイルを置いてその中に先ほどの1行を記載しても解決しない。
それではってことでPHP7とパッケージ一式全てを再インストールすれば美しく解決します。
これはPHP5.6でハマった方々も同じように解決できるのでは。
#これで解決!
まずは、何がインストールされているか確認しましょう。
このコマンドでPHPに関連する一覧が確認できます。
>rpm -qa | grep php
これらを全て削除します。このコマンドはphpにワイルドカードつけてます。自己責任で。自己責任とは「書いている僕は責任負いません。読んでる君が責任負うよ」ってことです。
>sudo yum -y remove php*
これでphpはあっさり消えました。
続いてPHP7とredis含むパッケージをインストール。その前に、リポジトリーの向き先だけ整えておきましょう。
sudo yum -y update
sudo yum -y install yum-plugin-priorities
sudo yum -y install epel-release
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
途中、エラーメッセージ「既にインストールされてます」ってが出るかもしれませんが、そういうことです。
そしてPHP7と関連パッケージをインストール
sudo yum install --enablerepo=remi-php74 -y php php-mbstring php-pear php-fpm php-pdo php-intl php-mysqlnd php-pecl-redis php-xml php-gd php-json
インストールしたいものを並べておきましょう。
今回はRedisがきっかけでハマりこの現象の解決策に行き着きましたが、他のパッケージも同様のことが起こりそうなので、そのときここに行き着いたら試してみてください。最初はどきどきですが意外とあっさりですので。
##参考記事
http://www.unionnet.jp/develop/php7/
http://qiita.com/pakiln/items/e3351ade2bb5aeb198dc
http://qiita.com/shinofara/items/9476cee35cfac1b7ee50