かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

HomebrewでpyenvをアップデートしたらPythonが動かなくなった

HomebrewでpyenvをインストールしてPython環境を作っていました。

brew upgradepyenvがアップデートされた後Pythonを実行しようとしたら次のようなエラーが出るようになってしまいました。

$ python
/Users/user_name/.pyenv/shims/python: line 21: /usr/local/Cellar/pyenv/1.2.4/libexec/pyenv: No such file or directory

.pyenv/shims/pythonの中をエディタで見ると、pyenvのパスがベタで書かれていたので、brew upgradepyenvのバージョンが上がり読み込めなくなっていたのが原因のようでした。

pyenvのパスを再設定 (pyenv rehash)

$ pyenv rehash

このコマンドを実行すると.pyenv/shims/pythonのパスが再設定され無事Pythonが実行できるようになりました。

$ pyenv --help
...
   rehash      Rehash pyenv shims (run this after installing executables)

.pyenv/shims/pythonの中にあるパスを直接書き換えるのは、他にも影響がある可能性があるのであまりよろしくないでしょう。

pyenvをアップデートしたら、忘れなずpyenv rehashを実行する。
自動的に実行して欲しさ若干ありますが


[参考]

Pythonスタートブック [増補改訂版]

Pythonスタートブック [増補改訂版]

Mac OSX 開発環境セットアップのメモ (6) ApacheでPHPが動くようにする

PHPはphpbrewでインストールしました。

Macにデフォルトで入っているapacheを起動しないようにする

$ sudo apacehctl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

homebrewでインストール

以前はhttpd24という名前だったのが、httpdに変更になってるっぽい。

$ brew search httpd24
No formula or cask found for "httpd24".
Closed pull requests:
Rename deprecated httpd22/httpd24 to httpd (https://github.com/Homebrew/homebrew-php/pull/4500)
...
$ brew install httpd

Apacheの起動・停止・再起動

起動

$ sudo apachectl start

停止

$ sudo apachectl stop
# 即座に停止
$ sudo apachectl -k stop

再起動

$ sudo apachectl restart
# 即座に停止して再起動
$ sudo apachectl -k restart

httpd.confでApacheの設定

httpd.confをエディタで開き編集します。
httpd.confの場所はhomebrewでインストールした場合

/usr/local/etc/httpd
ポートを80に変更
Listen 8080

Listen 80
localhostのルートにするディレクトリを指定

DocumentRootとその下にある<Directory>のパスをルートにしたいディレクトリに変更する。

DocumentRoot "/usr/local/var/www"
<Directory "/usr/local/var/www">

DocumentRoot "/Users/<your_name>/Documents/local"
<Directory "/Users/<your_name>/Documents/local">

.htaccessとかが使えるようにルートパスを設定した<Directory>内にあるAllowOverrideAllに変更

<Directory "/Users/<your_name>/Documents/local">
  # ... 中略
  # AllowOverride controls what directives may be placed in .htaccess files.
  # It can be "All", "None", or any combination of the keywords:
  #   AllowOverride FileInfo AuthConfig Limit
  #
  # AllowOverride None
  AllowOverride All # <- Allに変更
mod_rewrite を有効にする

mod_rewrite.soの読み込みのコメントアウトを解除する

# LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
User・Groupの設定

多分権限的なアレ...の筈
UserをPCのユーザー名(/Users/<user_name>/のパスに出てる名前でたぶんOKっぽい)
GroupStaffに変更する

User Sites
Group daemon

User <user_name>
Group Staff
サーバー名をlocalhostに変更
#ServerName www.example.com:8080

ServerName localhost
httpd-vhosts.confを読み込むようにしておく

ヴァーチャルホストの設定ファイルextra/httpd-vhosts.confを読み込むようにコメントアウトを外します

# Virtual hosts
# Include /usr/local/etc/httpd/extra/httpd-vhosts.conf

# Virtual hosts
Include /usr/local/etc/httpd/extra/httpd-vhosts.conf

httpd-vhosts.confにデフォルトでサンプルが入っていて、そのままだとApache起動時に指定しているフォルダが無いと出てくるので、httpd-vhosts.conf無いのサンプルの設定は削除またはコメントアウトしておきます。

設定したlocalhostが動作しているか確認

ルートに指定したディレクトリに適当なindex.htmlを作成して、apacheを起動

$ sudo apachectl start

http://localhostにアクセスして作成したindex.htmlの内容が表示されていればOK
確認ができたらApacheを停止しておきます

$ sudo apachectl stop

ApacheサーバーでPHPを使えるようにする

LoadModuleでphpbrewでインストールしたphp_moduleが読み込む設定になっているか確認

LoadModule php7_module /usr/local/lib/httpd/modules/libphp7.2.9.so

php7_module の読み込み設定がhttpd.confに無かった

phpbrewでPHPをインストールする際に+apxs2を付けてApacheのバリアントをインストールする必要があったようです。(+defaultには含まれていなかったようです...)

$ phpbrew install 7.2 +default +mysql +apxs2 +openssl

PHPがビルドされた状態でもう一度インストールコマンドを実行すると追加したバリアントだけインストールされたみたいなのでこれで良しとしました。

インストールが完了すると自動的にhttpd.confLoadModule php7_module 〜が追記されていました。

/usr/local/lib/httpd/modules/libphp7.2.9.so

phpbrewだとlibphp.soのパスは/usr/local/lib/httpd/modules/になるようです。

PHPを有効にする

httpd.confの下記部分を編集・追記

<IfModule dir_module>
  DirectoryIndex index.html
</IfModule>

<IfModule dir_module>
  # `/`でアクセスした時にindex.phpも表示するようにする
  DirectoryIndex index.php index.html
</IfModule>

# 追記
<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>
# 又は
<IfModule php7_module>
  AddType application/x-httpd-php .php
</IfModule>

<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>でも<IfModule php7_module> AddType application/x-httpd-php .php </IfModule>でも動作するようなのですが、違いがいまいち解っていませんいません...

ApacheサーバーでPHPが動作するか確認

DocumentRootで指定したルート下にinfo.phpファイルを作成します。(ファイル名はテキトーでOK)

info.php
<?php phpinfo(); ?>

Apacheを起動

$ sudo apachectl start

http://localhost/info.phpにアクセスしてphpbrewでインストールしたPHPの情報が表示されていればOK


[参考]

Apache - apacheの起動,停止,再起動に関するまとめ - Qiita

Mac OSX 開発環境セットアップのメモ (5) phpbrewでPHPをインストール

フリーランスのお仕事だとレンタルサーバーにWordPressでホームページ作りたいってのがまだまだ多いのです。 MAMPやXAMPPはサーバーもセットで簡単にインストールできるのですが、稀にお客さんの用意しているレンタルサーバーのPHPMySQLのバージョンが違っていて(古くて)バグを出してしまうということがあるので、自分でバージョンを指定した環境が用意できるようにしておいた方が安全な事が多いです。(本番リリース後、環境依存のバグ辛い!)

PHPのバージョンを管理できるphpenvはrbenvとバッティングするらしくメンドそうだったので、phpbrewを使ってPHPの環境を作ることにしました。

  • homebrew, x-code インストール済み

PHPのビルドに必要なパッケージのインストール

先にhomebrewでPHPのビルドに必要なパッケージをインストールしておきます。
参照: Requirement · phpbrew/phpbrew Wiki · GitHub

$ brew install automake autoconf curl pcre bison re2c mhash libtool icu4c gettext jpeg openssl libxml2 mcrypt gmp libevent
$ brew link icu4c
$ brew link --force openssl
$ brew link --force libxml2

phpbrewのインストール

以前はhomebrewでインストールできたようですが、curlで直接ダウンロードする方法に変わっていたので、公式のドキュメントを参考にインストールしていきます。

$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ sudo mv phpbrew /usr/local/bin/phpbrew
$ phpbrew init

ダウンロードして、アクセス権を変えて、/usr/local/binに移動させて初期化。

~/.bashrcにを開き下記のphpbrewのパスを追記して保存

# phpbrew
source ~/.phpbrew/bashrc

ターミナルにもパスを反映

$ source ~/.bashrc

phpbrewでパッケージを探すプレフィックスを設定

macports, homebrew, debian, ubuntu, またはカスタムパスが使える。phpbrewがパッケージを探す時にどれを使うかみたいな感じだと思います。
※ ターミナルにphpbrewのパスが反映されてない状態で実行するとphpbrewコマンドでエラーが出るようになるので注意が必要です。

homebrewをlookup prefixに設定

$ phpbrew lookup-prefix homebrew

PHPのインストール

phpbrewでインストールできるバージョンの一覧を表示
$ phpbrew known
phpをインストール
$ phpbrew install <version> +default

+defaultオプションをつけると、もっともよく使用されているバリアント(Variants)をまとめてインストールしてくれるようです。

バリアントの種類を確認する

$ phpbrew variants

バリアントを指定してインストールする場合はPHPのバージョンに続けて+キーワードを付けて+mysqlのように指定すればOKなようです。

$ phpbrew install <version> +<variant_name>

追記: +defaultにはmysqlapacheに関するものが含まれていないっぽいので、WordPressなどでの使用する場合は+mysql, +apxs2, +opensslのバリアントも指定したほうが良さそうです

$ phpbrew install <version> +default +mysql +apxs2 +openssl
インストールしたPHPを使う

PHPの切り替え (switch version temporarily)

$ phpbrew use <version>

デフォルトで使用するPHPを指定 (switch default version)

$ phpbrew switch <version>

別のターミナルを開いてPHPのバージョンを確認

$ php -v

切り替えたバージョンが表示されていればOKです。

php.iniの設定

php.iniの場所を調べる

$ php --ini

phpbrewでPHPをインストールした際のphp.iniの場所は~/.phpbrew/php/php-<version>/etc/php.iniのようです。

timezoneの設定

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Asia/Tokyo"

mysql.sockの設定

[Pdo_mysql]
; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
pdo_mysql.default_socket= /usr/local/var/mysql/mysql.sock

[MySQLi]
; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysqli.default-socket
mysqli.default_socket = /usr/local/var/mysql/mysql.sock

※ PHP56はmysql.default_socketmysqli.default_socketpdo_mysql.default_socketmysql.sockのパスを追加しました。

composerのインストール

homebrewでcomposerをインストールしておきます。

パッケージのチェック

$ brew search composer
==> Formulae
composer

インストール

$ brew install composer

 

この後apcheの環境を作ってlocalhostphpMySQLが使えるようにしたいと思います。


[参考]

phpbrewとphpenvの比較