オレオレ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 してくれないというバグです。

タスクのコード(http://trac.symfony-project.org/browser/tags/RELEASE_1_1_0/lib/task/project/sfProjectClearControllersTask.class.php)は、

<?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 を取っておいて、 symfonytrac でパッチ付きで報告しようと思います。



追記:
http://trac.symfony-project.org/browser/branches/1.1/lib/task/generator/skeleton/app/web/index.php?rev=7614

この、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あたり。
インストール周りとかは省略。


/etc/httpd/conf/httpd.conf

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 の機構のまんまですね。

現状の OpenPNEOpenPNE_Auth のインスタンス作成時に渡すオプションで PC版認証と携帯版認証を分けていますが、こいつらはもう専用のコンテナを作ってしまおうかと思うわけですよ。

む。いやまて、アクション内で

<?php
:
$this->getUser()->isSoftBank(); // 海老原は SoftBank を応援しています

とか書けたらハッピーなんじゃないか。symfony の思想的にはかなり正統派な書き方な気がする。

となるとクラス自体が factory の役目を果たさなきゃダメか。いやしかしそうなると login() はどうなる。factory で生成するインスタンスのクラスの親のメンバとして定義するか。