サイトアイコン たーちゃんの「ゼロよりはいくらかましな」

[Laravel][Homestead][Oracle] DB接続までの道のり

Laravel + Vue + postgresql on Homestead で開発していて、

要件から外部のOracleへも別途接続しなくてはならなくなりました。

 

Oracleの場合は、mysqlやpostgresqlと違って結構手間がかかったので

ぶつかった課題の解決方法含めてメモ。

 

 

今回は試験として、AWSのRDSにてインターネット経由でOracleのインスタンスに

接続できるようにこちらを参考に構築して試しました。

※ありがとうございます!

 

 

 

 

まずは手順

おおまかな手順としては、

・Oracle Instant Clientをインストール

・oci8インストール

・PDO_OCIインストール

・Laravel設定となります。

 

ここでPDO_OCIインストールまではこちらを参考にざっくりと進めました。

Laravel設定はこちらを参考にしました。

 

 

課題1 コンパイルバージョンが合わない!

手順通りコマンドを実行していって、php -vで表示してみたところ、

peclや、make installしたときのバージョンが合わない問題が発生して、

稼働しているPHPから参照できなかったです。

具体的には、

Module compiled with module API=20180731
PHP    compiled with module API=20210902

こんな感じになってしまいました。

日付が入っているので「?」となりましたが、

要するにコンパイルしたときのモジュールのバージョンと

動作しているPHPのバージョンが違うよということみたいです。

 

Homesteadの中にはたくさんのPHPのバージョンが

あるので、デフォルトと違うバージョンを指定していると起こってしまいそうですね。

 

解決策としては、今回の場合であれば、

sudo update-alternatives --config php

で、Homesteadで指定しているPHPのバージョンに合わせればOK。

 

僕の場合は、–config phpの他にphp-configとphpizeも変えました。

php-configはpecl installのために、phpizeはmake installのためにって感じですね。

 

 

 

課題2 OCI8 installでPHPバージョンが合わない!

次は、peclでOCI8をインストールするときに、

sudo pecl install oci8

これだと、

phpバージョンが8以上じゃないとダメ!って怒られました。

 

 

解決策としては、oci8のバージョン指定です。

PHP7以上だと↓の方法(2.2.0指定)でよいそうですよ。

sudo pecl install oci8-2.2.0

 

 

課題3 OCI8とPDO_OCIは読み込めたっぽいけどphpinfoに出てこない!

無事、php -vでエラーも出ないし、php -iでロードされているっぽいことは

確認できました。

 

でも、

Undefined constant OCI_CRED_EXT

こんな感じのエラーで接続できない!

 

定数が定義されていないとは??みたいに思いましたが、

どうやらOCI8が動作していないことが原因のようです。

 

 

そこで調べてみると、phpinfoにOCI8のセクションが表示されていない。

なるほど、読み込めたけど動いてなかったってことねと。

 

 

これが今回の一番のハマりどころでした。

解決策としては、

sudo vi /etc/php/7.3/mods-available/oci8.ini

↓ この1行だけ書いて保存
extension=oci8.so

sudo ln -s /etc/php/7.3/mods-available/oci8.ini /etc/php/7.3/fpm/conf.d/20-oci8.i
ni

sudo vi /etc/ld.so.conf.d/oracle.conf

↓ この1行だけ書いて保存
/usr/lib/oracle/12.1/client64/lib

sudo ldconfig

 

oci8.soのextensionの記述をmods-availableの下にoci8.iniを作成し、

fpm/conf.d配下にシンボリックリンクを作成したこと。

また、oracle.confを作成してldconfigしたこと。

の2つでOCI8がphpinfoに表示されるようになりましたー!!

 

 

 

 

 

課題4 laravel-oci8インストールでバージョン不整合

composer require yajra/laravel-oci8

これだけだと、最新がインストールされるので、

laravelのバージョンと合わないとエラーになりました。

 

 

解決策としては、

php artisan -V

でlaravelのバージョンを確認。

 

 

その後で、

composer require yajra/laravel-oci8:6.*

みたいに「確認したメジャーバージョン.*」とすると、

laravelバージョンにあったlaravel-oci8がインストールされます。

 

 

 

課題5laravel-oci8のインストールでメモリ割当上限エラー

課題4の対応後、順調に処理が進んでいたのですが、

メモリ割当のlimitに達してエラーになってしまいました。

 

 

解決策としては、

php -d memory_limit=-1 composer.phar require yajra/laravel-oci8:6.*

として、memory_limitを設けないで実行することで解消しました。

 

 

 

まとめ

以上、laravelからOracleへ接続するために、

サイトどおりやってみて解決にハマってしまったことのメモでしたー。

 

誰かの助けになれば幸いですー。

 

 


にほんブログ村


人気ブログランキング

モバイルバージョンを終了