★CodeIgniterでCron
本家WIKI
http://codeigniter.com/wiki/Cron_job_bootstrapper/
参考サイト
http://d.hatena.ne.jp/dix3/20081203/1228237872
★CodeIgniterを HMVCモジュール化
http://d.hatena.ne.jp/dix3/20081129/1227964872
「ヌル日記」さんの記事すごい。
すごく勉強になります。
雑記
★CodeIgniterでCron
本家WIKI
http://codeigniter.com/wiki/Cron_job_bootstrapper/
参考サイト
http://d.hatena.ne.jp/dix3/20081203/1228237872
★CodeIgniterを HMVCモジュール化
http://d.hatena.ne.jp/dix3/20081129/1227964872
「ヌル日記」さんの記事すごい。
すごく勉強になります。
今日はRedmine勉強会が開催されます。
私は普段、Subversion+Tracという環境で開発だったり、コーディングだったりデザインだったりをしてますが、最近はgit+Redmineなんて環境で環境を作っていらっしゃる方の話をよく聞きます。
とても楽しみ♪
–
redmineのことを知りたくて買った本です。これのsubversion本が非常にすばらしかったことから、trac本も購入済み。
サーバにredmineが動く環境を作ってみました。
tracだと、gitに対応していないため、今後は切り替えていくのもありかなぁと思っています。
(もっとtracをがっつり使うぞ!という気持ちもありますが・・・(^-^;))
–
公式サイトがオープンしました。
http://phpcon.php.gr.jp/2009/
記念すべき第10回にふさわしく,
* Facebook 開発者 Brian Shire 氏
* symfony 開発者 Fabien Potencier 氏
* Taiwan PHP User Group の Finjon Kiang 氏など豪華スピーカーを迎えて開催いたします!
PHP カンファレンス 2009 | 2009年9月4日・5日開催 日本PHPユーザ会主催
すっかりサボってしまっていた、smart.fmを再開しようと思います(><)
MyNETS2(というよりもCodeIgniter本体なんですが・・・)のコードを読み始めました。
全体像を想像しつつ、ノートに手書きでメモを書いてるのですが、どこまで読んだのかとか、メモを取るのに軸が欲しくなりました。
・・・・で使ってみたのが解析ソフトです。
GraphvizとDoxygenというソフトをWindows環境にインストールしました。
参考にさせていただいたサイトは私がインストールしたバージョンよりも少し古い情報のようですが、とても参考になりました。
参考にさせていただいたサイト
http://skazami.web.infoseek.co.jp/tools/Graphviz_Doxygen.htm
ためしに、破壊中(?)のMyNETS2を解析してみた結果のキャプチャです。(わりと大きい画像ファイルです)
CIUnitが入ったままなので、CIUnitも一緒に解析されています。
Class階層図がテキストリンクと画像が生成されたのがとても嬉しくて、キャプチャをとってみました。
生成される階層図の画像は、フォントサイズがあまりに小さかったので、設定画面で大きくしています。
BLOGだと、ちょっと見辛い気がする。
理解もしにくそうなので、何か手を考えてみる・・・・〆(。。)
今現在の状況で言えば、
modules以下の本当にテストをしたい箇所がテストが出来ませんが、
動くところまでもっていくことができました。
ただ、MyNETS2のコードを書き換えての対応なので、
あまりよくない対応です。
Loader.phpのモバイルかどうかを判定して、
モバイル用のviewファイルがあれば、
そっちをとりにいく処理を
コメントアウトして動かしてます・・・・orz
あきらめずにコードを追いたいと思います。
追記:2009.06.07
CodeIgniterの話題とMyNETS2(アプリケーションプラットフォーム)との話題の差がわかりにくいので画像を作成してみました。MyNETS2の話題に関してはしばらくこれを使おうかなと思います。
さらに追記:2009.06.07 17:36
コメントアウトした部分は、携帯からのアクセスの場合、携帯用のviewフォルダにファイルがあればそっちを読むべし的な処理部分でした。1つのコントローラが、件数の表示を切り替えるにしても同じコントローラを使う場合使わない場合もありそうなので、コメントアウトのままでもいいかもしれないと思い始めています。・・・・でもやっぱりあったほうがいいのかなぁ・・・・(汗)
CIUnit: Unit testing for CodeIgniter(2)の続きです。
(3)ではありませn・・・・・(汗)
phpunitの再インストールで動き出したと思われたCIUnitですが、
正常な動作ではありませんでした。
–
$ cd controllers/
$ phpunit testWelcome.php PHPUnit 3.3.16 by Sebastian Bergmann. .. Time: 0 seconds OK (2 tests, 2 assertions)
$ phpunit ControllersAllTests.php PHPUnit 3.3.16 by Sebastian Bergmann. .. Time: 0 seconds OK (2 tests, 2 assertions)
ここまでは正常です。
controllreのテストまで正常に動きましたが、
全テストではエラーが発生します
$ cd ../ phpunit AllTests.php PHPUnit 3.3.16 by Sebastian Bergmann. .............<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> <h4>A PHP Error was encountered</h4> <p>Severity: Warning</p> <p>Message: CIUnit::include_once(/var/www/html/works/system/application/controllers/Welcome.php): failed to open stream: No such file or directory</p> <p>Filename: tests/CIUnit.php</p> <p>Line Number: 124</p> </div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> <h4>A PHP Error was encountered</h4> <p>Severity: Warning</p> <p>Message: CIUnit::include_once(): Failed opening '/var/www/html/works/system/application/controllers/Welcome.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php')</p> <p>Filename: tests/CIUnit.php</p> <p>Line Number: 124</p> </div>PHP Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130 PHP Stack trace: PHP 1. {main}() /usr/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52 PHP 3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128 PHP 4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324 PHP 5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 PHP 6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 PHP 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658 PHP 8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677 PHP 9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375 PHP 10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607 PHP 11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404 PHP 12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489 PHP 13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0 PHP 14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147 PHP 15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195 Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130 Call Stack: 0.0005 83784 1. {main}() /usr/bin/phpunit:0 0.1485 5663072 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52 0.3327 9503688 3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128 0.3333 9506304 4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324 0.3342 9506512 5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 0.4183 9597480 6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 0.4809 10191464 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658 0.4809 10191464 8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677 0.4809 10191464 9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375 0.4811 10191464 10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607 0.4825 10201528 11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404 0.4826 10201528 12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489 0.4826 10201528 13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0 0.4827 10201528 14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147 0.4827 10201528 15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195 $ cd controllers/ $phpunit testWelcome.php PHPUnit 3.3.16 by Sebastian Bergmann. .. Time: 0 seconds OK (2 tests, 2 assertions) [root@localhost controllers]# phpunit ControllersAllTests.php PHPUnit 3.3.16 by Sebastian Bergmann. .. Time: 0 seconds OK (2 tests, 2 assertions) $ cd ../ $ phpunit AllTests.php PHPUnit 3.3.16 by Sebastian Bergmann. .............<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> <h4>A PHP Error was encountered</h4> <p>Severity: Warning</p> <p>Message: CIUnit::include_once(/var/www/html/works/system/application/controllers/Welcome.php): failed to open stream: No such file or directory</p> <p>Filename: tests/CIUnit.php</p> <p>Line Number: 124</p> </div><div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;"> <h4>A PHP Error was encountered</h4> <p>Severity: Warning</p> <p>Message: CIUnit::include_once(): Failed opening '/var/www/html/works/system/application/controllers/Welcome.php' for inclusion (include_path='.:/usr/share/pear:/usr/share/php')</p> <p>Filename: tests/CIUnit.php</p> <p>Line Number: 124</p> </div>PHP Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130 PHP Stack trace: PHP 1. {main}() /usr/bin/phpunit:0 PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52 PHP 3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128 PHP 4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324 PHP 5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 PHP 6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 PHP 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658 PHP 8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677 PHP 9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375 PHP 10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607 PHP 11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404 PHP 12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489 PHP 13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0 PHP 14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147 PHP 15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195 Fatal error: Class 'Welcome' not found in /var/www/html/works/system/application/tests/CIUnit.php on line 130 Call Stack: 0.0006 83784 1. {main}() /usr/bin/phpunit:0 0.1494 5663072 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:52 0.3345 9503688 3. PHPUnit_TextUI_TestRunner->doRun() /usr/share/pear/PHPUnit/TextUI/Command.php:128 0.3351 9506304 4. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/TextUI/TestRunner.php:324 0.3360 9506512 5. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 0.4190 9597480 6. PHPUnit_Framework_TestSuite->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:621 0.4814 10191464 7. PHPUnit_Framework_TestSuite->runTest() /usr/share/pear/PHPUnit/Framework/TestSuite.php:658 0.4814 10191464 8. PHPUnit_Framework_TestCase->run() /usr/share/pear/PHPUnit/Framework/TestSuite.php:677 0.4814 10191464 9. PHPUnit_Framework_TestResult->run() /usr/share/pear/PHPUnit/Framework/TestCase.php:375 0.4816 10191464 10. PHPUnit_Framework_TestCase->runBare() /usr/share/pear/PHPUnit/Framework/TestResult.php:607 0.4831 10201528 11. PHPUnit_Framework_TestCase->runTest() /usr/share/pear/PHPUnit/Framework/TestCase.php:404 0.4831 10201528 12. ReflectionMethod->invoke() /usr/share/pear/PHPUnit/Framework/TestCase.php:489 0.4831 10201528 13. testCIUnit->testDifferentControllers() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:0 0.4832 10201528 14. set_controller() /var/www/html/works/system/application/tests/ciunit/testCIUnit.php:147 0.4832 10201528 15. CIUnit::set_controller() /var/www/html/works/system/application/tests/CIUnit.php:195
なぜかAllTTestの場合、controllerのwelcomeを呼び出しているところが、Welcomeを呼び出そうとして失敗をしています。
CIUnit.phpの124行目
include_once(APPPATH . ‘controllers/’ . $controller . EXT);
の部分の$controller がwelcomeからWelcomeに変化しています。それによってファイルが読み込めずのエラーのようです。
無理やりな感じになおしてみました。
CIUnit.phpの124行目
include_once(APPPATH . ‘controllers/’ . $controller . EXT);
大文字でファイルがなかったら、小文字にしてファイル読み込んでよね的。
if(is_file(APPPATH . 'controllers/' . $controller . EXT)){
include_once(APPPATH . 'controllers/' . $controller . EXT);
}else{
$controller2 = strtolower($controller);
include_once(APPPATH . 'controllers/' . $controller2 . EXT);
}
やっとやっと、テストができるところまで到着(TAT)
ここまでの感想
phpunitの再インストールの記事を自力で探せませんでした。
基礎力がおそろしく足りないことを自覚しました。
「何がわからないか?」がわからないと解答が目の前にあってもそれが解答と理解できないのだなぁ・・・・
CIUnitへの挑戦はこんな流れでがんばってみる予定です
MacbookProのDVDドライブとHDDが不調なためApple銀座へ持ち込み、修理をお願いしました。
DVDドライブは修理、HDDは交換となりました。
思っていた以上に早く修理から戻り助かりました。
AppleCare入ってて良かった♪
修理から戻ったMacbookProは
修理に出す前にCarbon Copy Cloner(カーボン コピー クローナー)でバックアップを外付けHDDにとっておいたので、OSXの移行ツールを使ってバックアップから復旧。
BootCamp領域は、Wincloneで作っておいたバックアップイメージから復旧。
あっさりと元の環境を取り戻しました。
SubversionとWebdavとhocksでwebdavにコミットした内容を、コミットした直後に、動作確認をプロジェクトメンバー皆で確認できる環境が欲しいなと思い、環境を作ってみました。
Webdavの利用
webdavからのオートコミットであるという定型文がコミットログとして保存されます。
大きなメリットとしては、dreamweaverではFTPを使うのと全く同じ操作感でファイルをwebdavへUPすることができます。今まで全くwebdavを使ったことが無い人でもFTPでアップしながらの製作作業を行った経験のある方であれば、全く作業の内容を変えることなく、webdavを利用することが出来ます。
新たに覚えることは、dreamweaverでのwebdavサーバの設定方法だけです。
実際の製作内容で、新たに操作方法を覚えたり、普段と違う作業を行うといったことは一切ありません。
webdavはSVNの連動ではなく、webdav単体で利用する場合、アップされたファイルは指定のURLに保存されます。
apacheの拡張機能で、ファイルの操作をapacheが行うので、当然アップされたファイルはすべてapacheユーザのものになるため、パーミッションの問題が発生することはまずありません。
webdavのアクセス権限を制限するために使用する認証情報(ID,PASS)は、ファイルをアップする時にも使え、また表示確認の際、ブラウザ越しにurlへアクセスする場合にベーシック認証として動作するためID,PASSの管理が容易です。
WebdavとSubversionとの連動
subversionとwebdavを連動するように設定すると、webdavへのファイルアップ(削除も…)=コミットとなります。
自動的にsubversionへコミットしたことになります。
subversionクライアントソフトを使う場合との差は、コミットログの登録ができないことです。
webdavからのオートコミットの場合は次のようなコミットログが保存されます
Autoversioning commit: a non-deltaV client made a change to /xxxxx/xxxxx.text ←コミットしたファイルのパス
オートコミットしたコードの動作確認?
webdav経由でのオートコミットの場合、そのままではwebdav単体での利用とは違い、即ブラウザから表示確認(動作確認)を行うことが出来ません。表示確認を行う場所を作り、表示確認をするまえにsvn updateを実行する必要があります。
あらかじめ、サーバ上に動作環境としてソースコードをチェックアウトしておき、
subversionの機能で、コミットをしたタイミングで、プログラムを実行させるhocksという機能があります。
これを利用し、あらかじめ用意をしておいたサーバ上の動作環境に対して、svn updateを実行します。
レポジトリを設置したディレクトリ/hocks/post-commit.tmpl というファイルをpost-commitというファイルにコピーをして、実行権限をつけます
# cp post-commit.tmpl post-commit # chmod 755 post-commit
hocksで実行するファイルを、レポジトリのフォルダの中に設置場所を作り、そこに置きました。
# mkdir レポジトリのフォルダ/script_hocks/ # chmod 755 レポジトリのフォルダ/script_hocks/ # chown apache.apache レポジトリのフォルダ/script_hocks/
実行するファイルを作成
# vi レポジトリのフォルダ/script_hocks/svnupdate.cgi
#!/usr/bin/env python import os; result = os.system("svn update [チェックアウトした場所のパス]");
このままだと、svn updateをするapacheユーザがsvnのアカウントの情報をもっていない状態なのでrootで、一時的にapacheでログインできるようにし、svn updateをチェックアウトした場所のパス上で一度実行します。
順番はこんな感じ。
今回試してみた環境
補足的に・・・・
関連記事
–TODO
CodeIgniterでTDDができるようにする!
CIUnitを使ってみる
DocTestをCodeigniterで使えないか試してみるとかしてみる。
MyNETS2のコードを読んでみる。
はじめてのpython・・・・
たった3行だけどドキドキw
svnupdate.cgi
svn でpost-commitで実行するファイル。
#!/usr/bin/env python import os; result = os.system("svn update [チェックアウトした場所のパス]");