オレオレPEARチャンネルサーバを立てる試み(成功?)
バージョン落としたらうまく行ったぜ。
Chiara_PEAR_Server 用のMySQLユーザを登録しておく
ローカルの開発環境では root にパスワードを設定していないんですが、どうもパスワードなしはダメっぽいので、
$ echo "grant all privileges on *.* to pear@localhost identified by 'pear' with grant option" | mysql5 -u root
とかしてユーザを作る。
チャンネルを登録してパッケージ落とすとかする
$ sudo pear channel-discover pear.chiaraquartet.net $ sudo pear install chiara/Chiara_PEAR_Server-alpha
chiara/Chiara_PEAR_Server を run する
「Use "pear run-scripts chiara/Chiara_PEAR_Server" to finish setup.」とか言われるので、実行します。
$ pear run-scripts chiara/Chiara_PEAR_Server
質問に答える
答えます。
$ sudo pear run-scripts chiara/Chiara_PEAR_Server Including external post-installation script "/opt/local/lib/php/Chiara/PEAR/Server/mysqlinstall.php" - any errors are in this script Inclusion succeeded running post-install script "Server_mysqlinstall_postinstall->init()" init succeeded 1. Create/Upgrade database for Chiara_PEAR_Server? All previous installations must run the script : yes 1-1, 'all', 'abort', or Enter to continue: 1. Mysql database : pear 2. Mysql Username (must have create permision) : pear 3. Mysql password : pear 4. Database Host : localhost 5. Channel Administrator Handle (package.xml user tag) : 6. Channel Name (server uri like pear.php.net) : 1-6, 'all', 'abort', or Enter to continue: all Mysql database [pear] : Mysql Username (must have create permision) [pear] : Mysql password [pear] : Database Host [localhost] : Channel Administrator Handle (package.xml user tag) [] : ebihara Channel Name (server uri like pear.php.net) [] : ebipuri.local 1. Mysql database : pear 2. Mysql Username (must have create permision) : pear 3. Mysql password : pear 4. Database Host : localhost 5. Channel Administrator Handle (package.xml user tag) : ebihara 6. Channel Name (server uri like pear.php.net) : ebipuri.local 1-6, 'all', 'abort', or Enter to continue: Copying DB_DataObject config file to "/opt/local/lib/php/data/Chiara_PEAR_Server/data/DBDataObject/pear.ini" Creating Chiara_PEAR_Server database structure... Updating database succeeded 1-2, 'all', 'abort', or Enter to continue: all Suggested Channel Alias [ebipuri] : Channel summary [] : ebisandayo 1. Suggested Channel Alias : ebipuri 2. Channel summary : ebisandayo 1-3, 'all', 'abort', or Enter to continue: all Channel Administrator Real Name [] : Kousuke Ebihara Channel Administrator Email [] : ebihara@kousuke.co3k Channel Administrator Password [] : ebiebi 1. Channel Administrator Real Name : Kousuke Ebihara 2. Channel Administrator Email : ebihara@kousuke.co3k 3. Channel Administrator Password : ebiebi 1. PEAR Configuration File Location : /Users/co3k/.pearrc 2. Path to document root of web server for ebipuri.local : 3. name of frontend.php HTML admin frontend file : 4. temporary path to save uploaded releases in : 5. port clients should connect to (443 is SSL, 80 is regular HTTP) : 80 6. protocol clients should use to connect (http or https) : http 1-6, 'all', 'abort', or Enter to continue: all PEAR Configuration File Location [/Users/co3k/.pearrc] : Path to document root of web server for ebipuri.local [] : /Users/co3k/Sites/sns/sandbox/public_html/pear name of frontend.php HTML admin frontend file [] : index.php temporary path to save uploaded releases in [] : /tmp port clients should connect to (443 is SSL, 80 is regular HTTP) [80] : protocol clients should use to connect (http or https) [http] : 1. PEAR Configuration File Location : /Users/co3k/.pearrc 2. Path to document root of web server for ebipuri.local : /Users/co3k/Sites/sns/sandbox/public_html/pear 3. name of frontend.php HTML admin frontend file : index.php 4. temporary path to save uploaded releases in : /tmp 5. port clients should connect to (443 is SSL, 80 is regular HTTP) : 80 6. protocol clients should use to connect (http or https) : http
おおうまくいった。
ブラウザでアクセス
ということでブラウザでアクセス。
だけどなんかうまくいかない?(左側にメニューが表示されてくれない)
※ソースコードに手を入れまくって解決しました。なんかこのパッケージいろいろ問題あるっぽいんだけど、なんとかならんかな。自前で作るしかないのかな。
オレオレPEARチャンネルサーバを立てる試み(失敗)
みんな PEAR チャンネルサーバとか立てればいいと思うんだ。
ということで、 Chiara_PEAR_Server を使ってサーバ立ててみますよ。
Chiara_PEAR_Server 用のMySQLユーザを登録しておく
ローカルの開発環境では root にパスワードを設定していないんですが、どうもパスワードなしはダメっぽいので、
$ echo "grant all privileges on *.* to pear@localhost identified by 'pear' with grant option" | mysql5 -u root
とかしてユーザを作る。
Chiara_PEAR_Server 用のデータベースを作成しておく
$ echo "create database pear default character set utf8" | mysql5 -u root
まあこれはいつも通り。
チャンネルを登録してパッケージ落とすとかする
$ sudo pear channel-discover pear.chiaraquartet.net $ sudo pear install -f chiara/Chiara_PEAR_Server
※-f オプション付けているのは、現状 Chiara_PEAR_Server の stability が devel だからです。
さして難しいこともないですな。
chiara/Chiara_PEAR_Server を run する
「Use "pear run-scripts chiara/Chiara_PEAR_Server" to finish setup.」とか言われるので、実行します。
$ pear run-scripts chiara/Chiara_PEAR_Server
質問に答える
答えます。
$ pear run-scripts chiara/Chiara_PEAR_Server Including external post-installation script "/opt/local/lib/php/Chiara/PEAR/Chiara_PEAR_Server_Database.php" - any errors are in this script Inclusion succeeded running post-install script "Chiara_PEAR_Server_Database_postinstall->init()" init succeeded 1. Create/Upgrade database for Chiara_PEAR_Server? All previous installations must run the script : yes 1-1, 'all', 'abort', or Enter to continue: 1. Database type : mysqli 2. Database name : pear 3. Database Username (must have create permision) : pear 4. Database password : pear 5. Database Host : localhost 6. Channel Administrator Handle (package.xml user tag) : 7. Channel Name (server uri like pear.php.net) : 1-7, 'all', 'abort', or Enter to continue: all Database type [mysqli] : Database name [pear] : Database Username (must have create permision) [pear] : Database password [pear] : Database Host [localhost] : Channel Administrator Handle (package.xml user tag) [] : ebihara Channel Name (server uri like pear.php.net) [] : ebipuri.local 1. Database type : mysqli 2. Database name : pear 3. Database Username (must have create permision) : pear 4. Database password : pear 5. Database Host : localhost 6. Channel Administrator Handle (package.xml user tag) : ebihara 7. Channel Name (server uri like pear.php.net) : ebipuri.local
そしてエラー
DB_DataObject Error: Unable to load schema for database and table (turn debugging up to 5 for full error message)
え? なに? どゆこと?
symfony1.1.0 の clear-controller タスクにバグがありそうな件
symfony1.1.0 の clear-controller タスクにバグがありそうな件について。
どういうバグかというと、 clear controller してくれないというバグです。
<?php : if (preg_match('/new (.*?)Configuration\(\'(.*?)\'/', $content, $match)) {
このように new *Configuration をコード中に含むファイルを clear controller の対象としているのですが、生成されるコントローラのテンプレート(http://trac.symfony-project.org/browser/tags/RELEASE_1_1_0/lib/task/generator/skeleton/app/web/index.php)が、
<?php : $configuration = ProjectConfiguration::getApplicationConfiguration('##APP_NAME##', '##ENVIRONMENT##', ##IS_DEBUG##);
このように new *Configuration を含まない形になっており、 clear controller の対象とならずにタスクが終了してしまいます。
とりあえず今日このコマンドが必要なので、手元の symfony のコードを書き換えで diff を取っておいて、 symfony の trac でパッチ付きで報告しようと思います。
この、a new configuration system てのが new じゃなくなっても clear-controller タスクには残ってたんだなきっと。
追記2:
とりあえず書くだけ書いた。
http://trac.symfony-project.org/ticket/4114
あとでちゃんと書き直す。
SeleniumRC つかってみた
データの大量登録とかは SeleniumIDE を使ったりとかしていたんですが、たとえば URL の id 部分だけ変えるとかだとちょっと面倒だなということで、 SeleniumRC と PHPUnit を使ってみました。
以下インストール手順。
SeleniumRCインストール
$ wget http://archiva.openqa.org/repository/releases/org/openqa/selenium/selenium-remote-control/1.0-beta-1/selenium-remote-control-1.0-beta-1-dist.zip $ unzip selenium-remote-control-1.0-beta-1-dist.zip $ cp selenium-remote-control-1.0-beta-1/selenium-server-1.0-beta-1/selenium-server.jar /usr/local/bin
Selenium のサーバ起動
$ java -jar /usr/local/bin/selenium-server.jar
PHPUnit_Extensions_SeleniumTestCase とかインストール
$ sudo pear install -a Testing_Selenium-beta $ sudo pear channel-discover pear.phpunit.de $ sudo pear install -a phpunit/PHPUnit
target_c_diary_id=40までの日記にコメントつけまくるスクリプトを書く。
<?php require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; class test extends PHPUnit_Extensions_SeleniumTestCase { function setUp() { $this->setBrowser("*firefox"); $this->setBrowserUrl("http://example.com/"); } function testMyTestCase() { $this->open("/sns/210x/"); $this->type("username", "ebihara@example.com"); $this->type("password", "ebiebi"); $this->click("is_save"); $this->click("button_login"); $this->waitForPageToLoad("30000"); for ($i = 1; $i < 40; $i++) { $this->open("/sns/210x/?m=pc&a=page_fh_diary_comment_confirm&target_c_diary_id=" . $i . '&body=aaad'); $this->waitForPageToLoad("30000"); $this->click("//input[@value=' 書き込み ']"); $this->waitForPageToLoad("30000"); } } }
テストの実行
$ phpunit test.php
個人的には SeleniumIDE より断然こっちの方が好みだなと思うので、今後はこっちを使うよ(といっても、SeleniumIDEはSeleniumRC向けのテストも出力してくれるので併用とかはすると思うけどメインは完全にこっち)。
大量データの登録だけでなく、テストとかもこれで書きたい。
開発環境セットアップメモ
CentOS5.2あたり。
インストール周りとかは省略。
AliasMatch ^/sns/([^/+]+)/(.*)? /home/co3k/sns/$1/public_html/$2 <Directory "/Users/co3k/Sites/sns/*/public_html"> AllowOverride All Allow from all Options FollowSymLinks Indexes </Directory>
dotfiles を co3k.org から落としてきて、シンボリックリンクを貼る。
$ svn co http://trac.co3k.org/svn/dotfiles/ $ ln -s dotfiles/dot_vimrc ~/.vimrc
~/.subversion/config で、 tags と Debug.php をコミット対象にしないように
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store tags Debug.php
/var/lib/pgsql/data/pg_hba.conf
※優先するものから上に記述
local all all trust host all all 0.0.0.0 0.0.0.0 trust
PostgreSQL で、 ALTER TABLE によるカラム追加時に default と NOT NULL 制約を指定できない件
PostgreSQL 7.4.3 on i586-momonga-linux-gnu, compiled by GCC gcc (GCC) 3.2.3 (Momonga Linux 1.0 3.2.3-12m) にて確認しました。
普通に以下のSQLを実行すると、
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255) NOT NULL default '';
こんなエラーが出るわけです。
ERROR: adding columns with defaults is not implemented
default を外してもエラーが。
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255) NOT NULL;
ERROR: adding NOT NULL columns is not implemented
ということで以下のようにして対処しました。
ALTER TABLE c_member_pre ADD COLUMN login_id varchar(255); ALTER TABLE c_member_pre ALTER COLUMN login_id SET DEFAULT ''; UPDATE c_member_pre SET login_id = ''; ALTER TABLE c_member_pre ALTER COLUMN login_id SET NOT NULL;
気をつけなければいけないのが、最初の ALTER TABLE で、追加したカラムには NULL 制約がついているので、 UPDATE でデフォルト値と同じものが挿入されている状態にしてから NOT NULL 制約を指定しないといけない点。
それにしてもこれは面倒くさすぎるぞちょっとどうなんだ。
OpenPNE3 用の認証プラグインのひな形を作るぞ計画
昨日の16時くらいから、暑くて全然やる気出ないままダラダラと OpenPNE3 の認証をどうしようかということについて考えてましたあああああああ暑すぎる。
今週の OpenPNE を書いてなかったりとか、もろもろやらなきゃいけないことやってない気がしますが、夏なので見逃してほしいわけですよ。
で、OpenPNE3 の認証ですが、こんな感じのプラグインを作って実現しようかなと思います。
(縮小なし)
まあ基本的には PEAR::Auth の Auth_Container の機構のまんまですね。
現状の OpenPNE は OpenPNE_Auth のインスタンス作成時に渡すオプションで PC版認証と携帯版認証を分けていますが、こいつらはもう専用のコンテナを作ってしまおうかと思うわけですよ。
む。いやまて、アクション内で
<?php : $this->getUser()->isSoftBank(); // 海老原は SoftBank を応援しています
とか書けたらハッピーなんじゃないか。symfony の思想的にはかなり正統派な書き方な気がする。
となるとクラス自体が factory の役目を果たさなきゃダメか。いやしかしそうなると login() はどうなる。factory で生成するインスタンスのクラスの親のメンバとして定義するか。