桜咲く地の気まぐれ日記

管理人の半暴走日記です。勢いのまま書いてることもあるので支離滅裂でも生暖かい目で見てくださいな。

Macのローカル環境が変になっていて困った話

仕事でMacさんを使っているのですが、つい先週ローカル環境がおかしくなっていることに気づいた。

  • 「//localhost/」でSites以下のディレクトリに繋がらない。
  • phpinfo()のphpバージョンが標準で入っている奴になっている。
  • PostgreSQLサーバが起動しない。

な ぜ だ 。

というのも、10月に入った案件でそのMacにはPHP70 + PostgreSQL96の環境を構築して実際に開発をしていたのです。

動いてたんです。

ほんの1、2ヶ月前のことながら自分が何かしたのかすらわからない。
いや、過去の自分など他人とよく言うのだからわかるはずもないのだ。

ということで、修復という名の環境再構築が始まったのでした。
この修復に相当悩んだので、個人用メモとしてここに書き留めておきます。

localhostに接続できない

Apacheのvhostファイルの中身を見たら、あれ?

<VirtualHost *:80>
DocumentRoot # 省略 #
ServerName localhost.example
# 省略
</VirtualHost>

ServerNameにこんな感じで設定してあったので、そのアドレスでアクセスするとこのDocumentRootに設定してあったディレクトリは無事にブラウザで表示確認ができました。

んん?

試しにコピーしてvhostの設定を増やし、hostファイルに設定も書き加えるも繋がるのは上記のそれだけ。
よく意味がわからないが、ぶっちゃけなんでこれ設定してあるのかもよくわからなかったので、とりあえず全部コメントアウト
無事にlocalhostに接続できるようになりました。

vhost()とは。私の設定の仕方がおかしかったんだろな…うん、たぶん。


phpinfo()のphpバージョンが更新されない

ハマった第一弾。

とりあえずおかしくなった時の環境としては、httpd24、php70ともにHomebrewでインストールしてありました。
php70入れる時に最終的にhomebrewが一番すんなり入れられた記憶。
で、ちょっと諸事情でここにphp53を入れたかったんです。

しかし、Homebrewでphp53を入れてlinkし、Apacheを再起動しても表示が変わらない。
Terminalで

$ php --version

と打ってPHP53が表示されるもphpinfo()では標準のPHP55が表示される始末。

一体何が起こっている……!?

で、Homebrewから入れ直したり、この際だからとPHP管理をphpbrewに変更したりとインストールし直したんですが、全く改善する兆しが見えない。
うーん? と首をひねって考えて、あることに気がつく。

これ、もしかしてHomebrewのApacheじゃなくて標準のApacheが動作したりしてたりしてない?

いやいや、じゃあさっきのvhostの設定は何だったんだ。あれは反映されてたぞ。
いやでも、標準Apacheが起動していてそれが標準PHP55の方を参照していたとしたらわからなくもないような。

ということで、試しに自動起動に登録されてると厄介なのでそれを解除して、再起動し、Terminalからコマンドで起動してみることに。

Mac標準Apache自動起動登録・解除に関してはググればすぐにヒットしてくださるので、ありがたくそれをコピペする。
Macを再起動して

$ sudo apachectl start

phpinfo()の表示は……PHP53!キタ━(゜∀゜)━ッ!!

ここに辿り着くまでに丸一日かかってしまった。
だがしかし、事はここですべて丸っと解決はしなかったのだ……。

PostgreSQLに接続できない

ハマった第二弾。

案件によりけりだけれど、とりあえず今はDBサーバはPostgreSQLをメインに使用しています。
で、ブラウザからの確認にはAdminerを使用しているんですが、これでログインが、できない。

というか、どうもDBサーバが起動していないっぽい。

Terminalからもコマンドを打って確認。

$ pg_ctl -D /usr/local/var/postgres -l logfile start
$ psql -l
  psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

なんかエラーでてるー。というかやっぱ起動失敗してるー。

これもApacheと謎現象と同じかしら? いやいやでもデフォルトでpostgresql入ってたっけ?
ともやもやしながら一応確認する。

自動起動に入っているかコマンド打って確認。

$ launchctl list

特になし。
プロセスも確認したけれど他に動いてるPostgreSQLはないようだった。

考えた末、Homebrewから再インストール。
この時点で何回か

$ brew uninstall postgresql
$ brew cleanup
$ brew install postgresql

みたいな感じで再インストールしていても直らなかったので、「Mac(Yosemite) + brewでPostgreSQLインストール」さんを参考に再インストールしたら直りました。

$ brew install postgresql --with-python

え!? これが正解??

ま、まあこれでピクリともしなかった

$ initdb /usr/local/var/postgresql -E utf8

も問題なく動いたのだ。
さっきと同じく

$ pg_ctl -D /usr/local/var/postgres -l logfile start
$ psql -l

を打ってみると、無事DBが表示されました! やったぜ!!

ということでAdminerからもアクセスできることを確認。
うおっしゃー! 環境修復(たぶん)終わったー!!

明日一応もっかい起動して確認するんだ。
このMac、サブマシンだから。


余談

実は間抜けながらphp拡張モジュールのpdo_pgsqlについて無駄に悩んでました。実はこれがハマった第二弾で、DBサーバは第三弾。
php.iniにデフォルトで書かれている「pdo_pgsql.dll」がWindows用だと気づかずに、コメントアウト外して、悩んでいました(笑)

阿呆か、気づけよww


今回の事件で良かったことといえば、すんなりphpbrewに移行できたことでしょうか。
以前マシンにPHP70を入れようとした時に、phpbrewやら他のphpバージョン管理ツールを試したもののlibphp7.soファイルの作り方がわからなくて最終的にHomebrewでインストールできたという経緯があったのですが、今回やってみたら、苦労した分覚えていたようでそこまでひっかからずにlibephp7.so、libphp5.soファイルを作成してインストールできたことでしょうか。

何事も時間を置くと理解しているものらしい。



とにかく、またこんなことが起こりませんように( ´Д` )