nazolabo

フリーランスのWebエンジニアが近況や思ったことを発信しています。

続き

中の人に見られちゃったからがんばる!でも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にしてくれる(というかオプションで、生成されるファイルのパーミッションを設定できる)機能があれば十分だと思います。