中の人に見られちゃったからがんばる!でもhttp://www.venten.net/?eid=584515は前のとどこが変わったのかよくわかんないです!ごめんなさい!
あと書き忘れてたけど、環境はVMware上のFreeBSD6.1です。PHPはportsから入れた5.2.0です。
ファイルがコピーされない問題
まさかアップロードミスでは…と思ったけどそれは無かった。contribute/generic/resource/templates/scaffold/sample.htmlは普通にある。DBはどれだろ?
とりあえずテンプレートのほうがどういう処理をしてるのか追う。
contribute/ContributeInstaller.php
if(!FileUtil::exist(Rhaco::templatepath("sample.html"))){ FileUtil::cp(ContributeInstaller::path("generic/resources/templates/scaffold/sample.html"),Rhaco::templatepath()); }
テンプレート部分はこれ。各状態を出力させてみる。(FileUtil::existの結果だけvar_dump())
Rhaco::templatepath("sample.html") -> sample.html FileUtil::exist(Rhaco::templatepath("sample.html")) -> bool(false) ContributeInstaller::path("generic/resources/templates/scaffold/sample.html") -> ***/rhaco/contribute/generic/resources/templates/scaffold/sample.html Rhaco::templatepath() ->
うわああああ(AA略
どうもRhaco::templatepathがおかしい気がする。ソースを追う。
function templatepath($filename=""){ if(empty($filename)) return Rhaco::constant("TEMPLATE_PATH"); if($filename[0] === "/" || preg_match("/^[\w]+\:\/\//",$filename)) return $filename; require_once((defined("RHACO_DIR")?constant("RHACO_DIR"):"")."io/FileUtil.php"); return FileUtil::getFilePath(Rhaco::constant("TEMPLATE_PATH"),$filename); }
とりあえず引数が空の時に何も出力されていない。Rhaco::constant("TEMPLATE_PATH")を追う。
function constant($defineName,$value=""){
if(!defined($defineName) && $value !== ""){
define($defineName,$value);
}
return defined($defineName) ? constant($defineName) : null;
}
defineしてるだけっぽい。TEMPLATE_PATHは、resources/templates/settings.php.templateの
Rhaco::constant("TEMPLATE_PATH",FileUtil::getFilePath(Rhaco::path("resources/templates")));
これ。んじゃTEMPLATE_PATHってどうなってるの?ということで最初のContributeInstaller.phpのところで出力させてみる。
Warning: constant() [function.constant]: Couldn't find constant TEMPLATE_PATH in ***/rhaco/contribute/ContributeInstaller.php on line 20
あれえええ
settings.php.templateを読み込んでいるのは、setup/SetupGenerator.phpの
$fileUtil->write(Rhaco::path("__settings__.php"),ApplicationInstaller::getPhp($parser->read(Rhaco::rhacoresource("templates/settings.php.template"))));
これ。ここ自体は問題なさそう。でもこれって変数を割り当ててはいないよね?多分これで生成された__settings__.phpを読み込まないと駄目なんじゃないかと。
というわけでこの行の直後に
include_once(Rhaco::path("__settings__.php"));
を追加で正常に動いた。しかしなんで他の人は普通に動くんだろう?
パーミッション問題
レンタル鯖うんぬんというより、ぼくの環境がApacheのユーザと作業ユーザを別にしてるので(特に意味はないけど、デフォルトだとそうなってる人は多い気が)、生成されたファイルをいじることができないというか、そもそもフォルダをApacheのユーザ権限にしないといけないのが面倒というか
まあそれは仕方ないとして、基本的にrhacoをレンタルサーバで使う場合は、そもそもレンタルサーバ上で作業するほうがありえないと思うので、ローカルで作って公開時に全部アップロードでいいから大丈夫だと思うんだけど、ローカルの環境がぼくみたいな人は、rhacoでファイルが生成されてそれをいじるぞーって時に自分のユーザで権限がなくてうわああああ(AA略)になるので、単純にファイル生成時にパーミッションを勝手に777にしてくれる(というかオプションで、生成されるファイルのパーミッションを設定できる)機能があれば十分だと思います。