2017年1月3日 追記
今日、まっさらな状態のところへphpenvをインストールしたところ、スクリプトの該当箇所が全て/.php-version
になっていました。いつの間に直されたんでしょうね…?とりあえず、手間が一つ減りましたね。
compassが使えない!!
PHPで複数人で開発をしているので、バージョンを合わせるためにphpenv local
でバージョンを設定すると、なぜか.ruby-version
ファイルが生成されています。
$ phpenv local 5.4.32
$ ls -ahlF
total 152
drwxr-xr-x 27 user staff 918B 10 13 00:02 ./
drwxr-xr-x 5 user staff 170B 10 7 11:05 ../
-rw-r--r--@ 1 user staff 10K 10 12 22:22 .DS_Store
-rw-r--r-- 1 user staff 205B 10 12 22:32 .buildpath
-rw-r--r-- 1 user staff 557B 10 9 14:16 .project
-rw-r--r-- 1 user staff 7B 10 13 00:02 .ruby-version <== アイエエエ! Ruby!? Rubyナンデ??????
drwxr-xr-x 17 user staff 578B 10 9 14:31 .sass-cache/
drwxr-xr-x 3 user staff 102B 10 7 11:11 .settings/
drwxr-xr-x 7 user staff 238B 10 12 23:50 .svn/
・・・
Rubyは関係ないプロジェクトだから別にいいか…と思って気にせず使っていたのですが、compass
を使おうとしたら問題発生!
$ compass compile ・・・
rbenv: version `5.4.32` is not installed (set by /path/to/project/.ruby-version)
ですよねー!!でもどうやって回避する!?
と思って、ちょっと調べてみると**env系って殆どシェルスクリプトらしい…
ならば書き換えてしまえば良い、という安直な発想に至ったわけです。
phpenvのスクリプトを書き換える
以下の内容は私の環境では問題なく動作しているものですが、保証は致しません。自己責任にてお願いします。
まず、.ruby-version
が含まれるスクリプトを洗い出します。
$ grep -l .ruby-version $(phpenv root)/libexec/phpenv-*
/Users/user/.anyenv/envs/phpenv/libexec/phpenv-local
/Users/user/.anyenv/envs/phpenv/libexec/phpenv-version-file
というわけで、この2つの中身の.ruby-versionを全て.php-versionに書き換えるというかなり横暴な手段に出ます。
$ sed -i -e 's/.ruby-version/.php-version/g' $(phpenv root)/libexec/phpenv-local
$ sed -i -e 's/.ruby-version/.php-version/g' $(phpenv root)/libexec/phpenv-version-file
さくっとワンライナーにてやりたい方はこちら。
$ grep -l .ruby-version $(phpenv root)/libexec/phpenv-* | xargs -n1 sed -i -e 's/.ruby-version/.php-version/g'
xargsコマンドってめちゃ便利ですね、最近知ったばかりですが(ーー;)
以上で、phpenv
のローカルのバージョン設定が.php-version
に書き出されるようになりました。
$ ls -ahlF
total 144
drwxr-xr-x 26 user staff 884B 10 13 00:20 ./
drwxr-xr-x 5 user staff 170B 10 7 11:05 ../
-rw-r--r--@ 1 user staff 10K 10 12 22:22 .DS_Store
-rw-r--r-- 1 user staff 205B 10 12 22:32 .buildpath
-rw-r--r-- 1 user staff 7B 10 12 23:42 .php-version <== これでOK!
-rw-r--r-- 1 user staff 557B 10 9 14:16 .project
drwxr-xr-x 17 user staff 578B 10 9 14:31 .sass-cache/
drwxr-xr-x 3 user staff 102B 10 7 11:11 .settings/
drwxr-xr-x 7 user staff 238B 10 12 23:50 .svn/
何か背景があるのでしょうか?
この事については、他の**envはそれぞれの名前になってるし、PHPでWebサイトを作るならば、その中でcompassを使うことも多々ある筈なので、どこかしかで話題に登っていると思い、Googleで調べてみました。
しかし、私の調べ方が悪いのか、あるいはそもそも話題に登っていないのか、それらしき情報が全くヒットしませんでした。
何か、phpenvだけ.ruby-version
である理由があるのでしょうか?ご存知の方、ご教授頂ければ幸いです。