ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

pearでPHPUnitインストール追記(失敗記事)

スポンサードリンク

http://www.flickr.com/photos/18573624@N03/3741745674
photo by memekode


以前の記事から。




vagrant + cakephpでphpunitをインストールしようしたらエラーになってワロタ - ITの隊長のブログ


本日、今度こそはとpearを使って、CakePHPPHPUnitをインストールしようと試した話。

環境

# 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をインストール


githubからCakePHP用のプラグインを落とします。

# 「~/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^


phar.phpunit.de

PEAR による PHPUnit のサポートが廃止されたため、


orz


泣きそうです。


とりあえず、

$ rm -rf ~/cakephp/app/Plugin/Phpunit


次回、最新の方法でPHPUnitをインストールします。


お楽しみに(眠いし、ショックで気力がないので、今日は終わり)