CentOS6でPHPを手ビルドしてOracleデータベースに接続する手順

まとめ
=====

とりあえず動けばいい場合は、remiリポジトリのphp55にoci8があるからそれを使ったらいいと思う。
Oracle Instant Client 12gのRPMを入れれば動くはず（未検証）

```shell-session
sudo rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm install php php-oci8
```

1. Oracle Instant ClientをZipでインストールしよう。RPMはやめておけ。場所はどこでもいいです。
2. 環境変数を3つ設定しよう。
3. PHPのconfigureに--with-oci8を付けよう。

以上。

Oracle Instance Clientのインストール
==================================
下記URLからZIPファイルをダウンロードして適当な場所に解凍する。BasicとSDKがあればOK。SQL*Plusがあれば接続テストができるので嬉しいかも。
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html?ssSourceSiteId=otnjp

環境変数（ORACLE_HOME等）の設定
=============================

```bash:.bash_profile
export LD_LIBRARY_PATH=/opt/oracle/app/product/11.2.0/lib
export ORACLE_HOME=/opt/oracle/app/product/11.2.0
export NLS_LANG=Japanese_Japan.UTF8
```

ログインし直すと良い。ちなみにシェルを起動しなおすには下記。

```shell-session
$ exec $SHELL
```

設定ファイルを読み直してもいいんだけど、PATH=$PATHとかしてる場合嬉しくないかも。

```shell-session
$ . ~/.bash_profile
```

ORACLE_HOMEだけでコンパイルはできる、NLS_LANGがないとマルチバイト文字列が正常に取得できない。

PHPのコンパイル
==============
詳細はマニュアルを参照のこと。
http://www.php.net/manual/ja/oci8.installation.php

以下は例。

```shell-session
$ configure --with-oci8=shared,$ORACLE_HOME
```

Apacheプロセスに環境変数を設定する。
================================
PHPはたいがいApacheプロセス下で動作するのでそちらにも設定。
/etc/sysconfig/httpdを編集するのが一番楽なのでは。

```bash
export LD_LIBRARY_PATH=/opt/oracle/app/product/11.2.0/lib
export ORACLE_HOME=/opt/oracle/app/product/11.2.0
export NLS_LANG=Japanese_Japan.UTF8
```

Rubyからも接続する
================
ruby-oci8を使う。ActiveRecordのAdapterとARにバージョン依存がある(1.5.0からはAR4必須）ので、3系を使うならバージョン指定する。環境変数が設定されていればbundle install --path vendor/bundleすると問題なくコンパイルされるはず。

```rb:Gemfile
source 'https://rubygems.org'

# Specify your gem's dependencies in my_gem.gemspec
gemspec

gem 'activerecord', "~> 3.2.17"
gem 'activerecord-oracle_enhanced-adapter', '~> 1.4.0'
gem 'ruby-oci8'
```

設定は以下の感じ。

```yaml:database.yml
db:
  production:
    adapter:  ruby_mysql
    host:     localhost
    username: foo
    password: bar
    database: baz_db

  development:
    adapter:  oracle_enhanced
    database: //localhost/ORACLE
    username: foo
    password: bar
```

その他
=====

追記: 以下は解決しました。yumが足りていなかった。たしかmysql-client と mysql-develが欲しかったと思う。

そんなことよりMySQLのGemがインストール出来ないんだけどなぜだろう（抜粋）

```shell-session
$ gem install mysql2
.....
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
....
```

```shell-session
$ rpm -qa | grep -i mysql
mysql-devel-5.1.73-3.el6_5.x86_64
MySQL-client-5.6.12-1.linux_glibc.x86_64
mysql-libs-5.1.73-3.el6_5.x86_64
$ ls /usr/lib64/mysql/
libmysqlclient.so     libmysqlclient.so.16.0.0  libmysqlclient_r.so.16
libmysqlclient.so.16  libmysqlclient_r.so       libmysqlclient_r.so.16.0.0
$ ls /usr/lib64/my*
libmysqlclient.so     libmysqlclient.so.16.0.0  libmysqlclient_r.so.16
libmysqlclient.so.16  libmysqlclient_r.so       libmysqlclient_r.so.16.0.0
```

謎い。とりあえずPure Rubyのライブラリで逃げている。

PHP5.4のyumリポジトリがあるので、そっちからPHPを入れてoci8エクステンションはphpizeで入れたらいいんじゃないのかという気もする。
http://php.net/manual/ja/install.pecl.phpize.php