以前の記事から。
vagrant + cakephpでphpunitをインストールしようしたらエラーになってワロタ - ITの隊長のブログ
本日、今度こそはとpearを使って、CakePHPにPHPUnitをインストールしようと試した話。
環境
# MacOS $ sw_vers ProductName: Mac OS X ProductVersion: 10.10.1 BuildVersion: 14B25 # pear $ pear version PEAR Version: 1.9.5 PHP Version: 5.5.14 Zend Engine Version: 2.5.0 # CakePHP $ echo "2.5.8"
pearをアップデート
こうすると良いですよ
# pearをアップグレードするにはpearのバージョンをあげなければならない。 $ sudo pear upgrade --force Archive_Tar WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update downloading Archive_Tar-1.3.13.tgz ... Starting to download Archive_Tar-1.3.13.tgz (19,891 bytes) .......done: 19,891 bytes upgrade ok: channel://pear.php.net/Archive_Tar-1.3.13 # アップグレード $ sudo pear upgrade pear WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update WARNING: "pear/Console_Getopt" is deprecated in favor of "pear/Console_GetoptPlus" downloading PEAR-1.9.5.tgz ... Starting to download PEAR-1.9.5.tgz (290,006 bytes) ............................................................done: 290,006 bytes downloading XML_Util-1.2.3.tgz ... Starting to download XML_Util-1.2.3.tgz (17,134 bytes) ...done: 17,134 bytes upgrade ok: channel://pear.php.net/XML_Util-1.2.3 upgrade ok: channel://pear.php.net/PEAR-1.9.5 PEAR: Optional feature webinstaller available (PEAR's web-based installer) PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer) PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer) PEAR: To install optional features use "pear install pear/PEAR#featurename"
ずらずらとでてくるけど、びびる必要はなし。
アップデートされているか確認します。
$ pear version PEAR Version: 1.9.5 PHP Version: 5.5.14 Zend Engine Version: 2.5.0
ちなみに、sudoで実行してくださいね。でないと下記エラーがでます。。。
$ pear upgrade PEAR Warning: lstat(): Lstat failed for /private/pear/cache/b9c464ce704f2efce3ed9fca09ee1f68rest.cacheid in PEAR/REST.php on line 276 PHP Warning: lstat(): Lstat failed for /private/pear/cache/b9c464ce704f2efce3ed9fca09ee1f68rest.cacheid in /usr/lib/php/pear/PEAR/REST.php on line 276 No releases available for package "pear.php.net/PEAR" upgrade failed
PHPUnitをインストール
# 「~/cakephp」には、それぞれの環境のパスを入れてください。 $ cd ~/cakephp/app/ $ git submodule add https://github.com/dereuromark/cakephp-phpunit Plugin/Phpunit
ダウンロードを終えたら、app/Config/bootstrap.phpでPluginをロードするように設定
CakePlugin::loadAll();
んで、cakeを使ってインストール!
$ ./Console/cake Phpunit.Phpunit install Welcome to CakePHP v2.5.8 Console --------------------------------------------------------------- App : app Path: /Users/mac_user/git/cakephp/app/ --------------------------------------------------------------- Installing PHPUnit 3.7 ... 1. /app/Vendor/ 2. /vendors/ Select VENDOR path to install into (q/1/2) [q] > 1 Error: XML cannot be read. #0 /Users/mac_user/git/cakephp/app/Plugin/Phpunit/Console/Command/PhpunitShell.php(410): Xml::build('http://pear.php...') #1 /Users/mac_user/git/cakephp/app/Plugin/Phpunit/Console/Command/PhpunitShell.php(346): PhpunitShell->_pearInfoXml() #2 /Users/mac_user/git/cakephp/app/Plugin/Phpunit/Console/Command/PhpunitShell.php(517): PhpunitShell->_pearInfo() #3 /Users/mac_user/git/cakephp/app/Plugin/Phpunit/Console/Command/PhpunitShell.php(175): PhpunitShell->_getDependencies('3.7') #4 /Users/mac_user/git/cakephp/lib/Cake/Console/Shell.php(437): PhpunitShell->install() #5 /Users/mac_user/git/cakephp/lib/Cake/Console/ShellDispatcher.php(209): Shell->runCommand('install', Array) #6 /Users/mac_user/git/cakephp/lib/Cake/Console/ShellDispatcher.php(66): ShellDispatcher->dispatch() #7 /Users/mac_user/git/cakephp/app/Console/cake.php(47): ShellDispatcher::run(Array) #8 {main}
おろ? (´・ω・)
なんかみたことのあるエラーやで・・・?
あ!
エラーその1
Error: Xml cannot be read.ん!? よくわかんない(´・ω・)
実はこれ、色々調べても解決することはありませんでした。
当時、コマンドを実行したときはモバイルルーターを使用していたので、恐らくネット回線が原因では? と、考えています。
なので、上記エラーがでたとしても根気強くもう一度コマンドを実行してください。
前回の記事で出現したエラーや!
ということは何度も実行すれば出てこない!?
そう思ったんだけど、どうやら今回は違うようです。何度実行してもでてきます。
面倒くせーので、ソース読みに行きました。
410行目ぐらいですね。
/** * @return array */ protected function _pearInfoXml($feed = null) { if ($feed === null) { // この行でエラー。このURLは使えないらしい // $feed = 'http://pear.phpunit.de/feed.xml'; // 読み込めるurlを探してきた。下記行を追加。 $feed = 'http://saucelabs.github.com/pear/feed.xml'; }
どうやら、記述されているURLは使えないらしい。。。なんでだろ?
つーわけで、適当に「phpunit feed.xml」でぐぐったら下記ページを検索したので、こちらに掲載されているfeed.xmlのurlをプログラムに記述しました。
http://saucelabs.github.io/pear/
これがfeed.xmlのurl
http://saucelabs.github.com/pear/feed.xml
話は少しそれますが、私はここで、「何故読み込めないurlをほったらかしにしているんだ?」と疑問をもてば、こんな意味不明なurl書き換えもことも、これから起こる悲劇は起こらなかったのだ。
悲劇に戻ります。
そのあともっかい実行!
$ Console/cake Phpunit.Phpunit install Welcome to CakePHP v2.5.8 Console --------------------------------------------------------------- App : app Path: /Users/mac_user/git/cakephp/app/ --------------------------------------------------------------- Installing PHPUnit 3.7 ... 1. /app/Vendor/ 2. /vendors/ Select VENDOR path to install into (q/1/2) [q] > 1 Downloading PHPUnit 3.7.32 .. Download finished. Extracting ..tar: Unrecognized archive format # tar がない・・・だと・・・!? tar: Error exit delayed from previous errors. Extracting done. Adding to Vendors ../Users/mac_user/git/cakephp/app/Vendor/_TMP/PHPUnit-3.7.32/ not found Adding done.
エラーです。tarコマンドがなんかおかしい? orz
くっそ残念でしたーorz
とは、いきませんが、どうやらMacのtarとLinuxのtarは違うようです。
Linuxのtarにしましょう。
# Macのtar $ tar --version bsdtar 2.8.3 - libarchive 2.8.3 # gnutarのバージョンアップ $ brew install gnu-tar # Path変更 $ export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH" # Linuxのtar。かわりました。ヾ(*´∀`*)ノ $ tar --version tar (GNU tar) 1.28 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by John Gilmore and Jay Fenlason.
再度PHPUnitをインストールしましょう。
$ Console/cake Phpunit.Phpunit install Welcome to CakePHP v2.5.8 Console --------------------------------------------------------------- App : app Path: /Users/mac_user/git/cakephp/app/ --------------------------------------------------------------- Installing PHPUnit 3.7 ... 1. /app/Vendor/ 2. /vendors/ Select VENDOR path to install into (q/1/2) [q] > 1 Downloading PHPUnit 3.7.32 .. Download finished. Extracting ..gzip: unknown compression format tar: Child returned status 1 tar: Error is not recoverable: exiting now Extracting done. Adding to Vendors ../Users/mac_user/git/cakephp/app/Vendor/_TMP/PHPUnit-3.7.32/ not found Adding done.
あれ? なんでやねん。
ソースを再度読みました。
630行目ぐらい
protected $files = array( '3.7' => array( array( 'url' => 'http://pear.phpunit.de/get/PHPUnit-3.7.32.tgz', 'folder' => 'PHPUnit' ), array( 'url' => 'http://pear.phpunit.de/get/File_Iterator-1.3.4.tgz', 'folder' => 'File' ), array(
直接URL記述しとるやんけ!?
あれ? じゃあ? さっきのエラーはなに?
ん? なんで、このファイルをダウンロードできないの?
いろいろな不信を抱きながら、私はPHPUnitのurlをコピペしてブラウザに貼り付けました。
( `・ω・)つ ミっぺ
http://pear.phpunit.de/get/PHPUnit-3.7.32.tgz
End of Life for PEAR Installation Method · sebastianbergmann/phpunit Wiki · GitHub
End of Life for PEAR Installation Method
(;@ω@)!!!?
(つд⊂)ゴシゴシ
(;`・ω・)!!!!!!
あー、なるほどね。End of Lifeね。
サポート終了しとるやんけ!!! ほげー^q^
orz
泣きそうです。
とりあえず、
$ rm -rf ~/cakephp/app/Plugin/Phpunit
次回、最新の方法でPHPUnitをインストールします。
お楽しみに(眠いし、ショックで気力がないので、今日は終わり)