<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Natz&#039;s Digital 漂流記 &#187; concrete5</title>
	<atom:link href="http://www.natzworks.com/digital/servers/concrete5/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.natzworks.com/digital</link>
	<description>Natz の PC/サーバー/デジタル機器に翻弄される日々</description>
	<lastBuildDate>Wed, 28 Dec 2011 05:33:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>concrete5: 不正なエラー</title>
		<link>http://www.natzworks.com/digital/2011/496.html</link>
		<comments>http://www.natzworks.com/digital/2011/496.html#comments</comments>
		<pubDate>Fri, 23 Dec 2011 02:36:33 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/digital/?p=496</guid>
		<description><![CDATA[以前に concrete5 で構築した某サイトの開発用サーバー (仮想マシン上の CentOS 5) を久々に起動させてブラウザーからアクセスすると、

不正なエラーが発生しました。
データベースのエラーが発生し、処理を中断しました

と表示されて、コンテンツを表示できなくなっていた。
site.pp の DB やユーザー情報の指定も間違いないし (これらが正しくない場合は「データベースに接続出来ません」となる)、MySQL 上での権限付与 (GRANT) をやり直しても変わらない。Web で検索すると同じ現象を取り上げたページがいくつか見つかるが、今回のケースはちょっと特殊なようだった。

解決の糸口になったのは、該当サーバー上で concrete5 を再インストールした際に表示された次のエラーメッセージ。

mysql error: [1: Can't create/write to file '/tmp/#sql_daa_0.MYI' (Errcode: 13)] in EXECUTE("SHOW COLUMNS FROM `CollectionSearchIndexAttributes`")

/tmp の状態を確認すると、確かに次の通りおかしなことになっていた。


・開発サーバーの /tmp
$ ls -ld /tmp
drwxrwsr-x 5 hoge hogege 4096 2011-12-23 00:00 /tmp/
※ hoge, hogege の箇所は、それぞれ管理用に普段使用しているユーザー名とグループ名。

・通常の /tmp
$ ls -ld /tmp
drwxrwxrwt 5 root root 4096 2011-12-23 [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/2011/496.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>concrete5: 携帯電話からの表示対応 (の一例)</title>
		<link>http://www.natzworks.com/digital/2010/460.html</link>
		<comments>http://www.natzworks.com/digital/2010/460.html#comments</comments>
		<pubDate>Mon, 22 Nov 2010 16:49:13 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/digital/?p=460</guid>
		<description><![CDATA[要件さえハマれば concrete5 は非常に便利な CMS ツールだが (※ 万能ではない)、少なくとも現状では、日本国内の携帯電話にオフィシャル対応していない点が惜しい。しかし先日 concrete5.4.0.5.ja で仕上げた案件では、携帯電話用ページを作成しつつ、携帯電話によるトップページへのアクセスを携帯電話用トップページへ転送する機能が必須だったため、少々頭を悩ませることになった。
尚、ここで言う 「携帯電話対応」 とは、「concrete5 で構築された PC 向けサイト中の任意のページまたはディレクトリ以下を携帯端末用サイトとし、携帯端末用サイトを携帯電話に搭載されたブラウザーから文字化けすることなく閲覧させる」 と言うだけなので、「ケータイからダッシュボードにアクセスして、新規ページをビシバシ作成可能？」 とか 「デザイン &#038; レイアウト変更も自由自在？」 等と過度な期待をされないよう、あらかじめご了承いただきたい。

concrete5 (PHP) や DB 側の文字エンコーディングは基本的に UTF-8 なのに対し、携帯電話用には Shift_JIS で表示しなければいけない。個人的には、スマートフォン・ユーザー暦が 4年目に突入したこともあって最近の携帯電話の事情をよく知らず、あまり偉そうなことは言えないが、とりあえずネックになるのは、この文字エンコーディングの部分だと思う。ページ内のエリアに収まっているのが独自に定義したブロックだけであれば、view.php やカスタム・テンプレート内で文字エンコーディングを変更できるが、「記事」 等のデフォルト・ブロックを使うこともあるだろうし、そもそもサイト名や meta タグの keyword、description 等、ブロック云々よりもはるかに手前で日本語文字列が登場する可能性が高い。
当初は登場する日本語文字列を表示する部分でいちいち文字エンコーディングを変換しようとしていたが、すぐに無理があることに気付いて、以下のような方針に切り替えた。

携帯電話用ページタイプを定義。
"1." 専用の header.php と footer.php を用意 (必要に応じて header_required.php と footer_required.php も)。
"1." 専用 header.php 内で、文字列の出力が始まる前に HTTP ヘッダーの "Content-type" を送出し、PHP 出力のバッファリングを開始。
"1." 専用 footer.php [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/2010/460.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>concrete5: ブロック追加ダイアログ内の並び順を変更</title>
		<link>http://www.natzworks.com/digital/2010/459.html</link>
		<comments>http://www.natzworks.com/digital/2010/459.html#comments</comments>
		<pubDate>Fri, 19 Nov 2010 23:52:08 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/digital/?p=459</guid>
		<description><![CDATA[concrete5 で Web ページを構成する際の最小単位 「ブロック」 は、デフォルトで様々なタイプが用意されている。一般的な用途にはデフォルトのままでほぼ十分な状態だが、このブロックの真骨頂は、DB に任意のブロック専用のテーブルを追加し、見た目のコントロールや編集が容易にできる点にある。例えば 「営業所」 や 「商品」、「番組」 等の拡張ブロックを定義し、任意の条件によって適宜表示を切り替える、と言った具合だ (ただしブロック間で相互に参照し合うような場合は、concrete5 の履歴機能を考慮して実装する必要あり)。
先日納品した某サイトでは、独自定義ブロックを 40個程使うことになり、かなり込み入った状態になって大変だったと言うのはまァいいとして、このように調子に乗ってブロックを大量に追加して行くと、ある問題が発生する。
concrete5 の管理画面であるダッシュボードで 「機能を追加」 ページを見ると、「インストール済み」 の拡張ブロックは、名前順にソートされるている。これは全く問題ないが、任意のページにブロックを追加する際に表示されるダイアログのブロック一覧では、ブロックを登録した順番、正確には BlockTypes.btID 順になってしまい、あまりユーザー・フレンドリーではない。大量にブロックを追加すると、目的のブロックを目視で探すのも一苦労なので、名前順でソートされるように挙動を変えてみた。

このカスタマイズは、/concrete/models/block_types.php を /models/ 以下にコピーし、コピーした block_types.php のメソッド BlockTypeList() を次のように編集する。リスト中の行番号は concrete5.4.0.5.ja の block_types.php なので、バージョンが異なると多少前後したり、記述が違っているかもしれない点に注意。
尚、オリジナルをいきなり編集してしまうとアップグレードが困難になるので、デフォルトで存在するファイルをカスタマイズする際は、極力 concrete5 のオーバーライドの仕組みを利用する。


・44行目付近
変更前: $q = "select btID from BlockTypes where btIsInternal = 0 ";
変更後: $q = "select btID,btName from BlockTypes where btIsInternal = 0 ";

・48行目付近
変更前: [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/2010/459.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>concrete5: インストール時の mb_ereg_match() エラー</title>
		<link>http://www.natzworks.com/digital/2010/447.html</link>
		<comments>http://www.natzworks.com/digital/2010/447.html#comments</comments>
		<pubDate>Mon, 04 Oct 2010 14:41:15 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[Live Commerce]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/digital/?p=447</guid>
		<description><![CDATA[期待の国産多言語対応 EC サイト構築ツール Live Commerce 用にセッティングした CentOS 5.5 上の Apache 2.2.3 + PHP 5.3.3 環境に concrete5 (5.4.0.5.ja) をインストールしたところ、DB 情報入力後の段階で、次のようなエラー・メッセージが大量に表示された。

[Mon Oct 04 15:35:xx 2010] [error] [client 192.168.xxx.xxx] PHP Warning:  mb_ereg_match(): mbregex compile err: premature end of char-class in /path/to/example.com/htdocs/concrete/libraries/3rdparty/Utf8MbcsUnigram.php on line 120, referer: http://www.example.com/
[Mon Oct 04 15:35:xx 2010] [error] [client 192.168.xxx.xxx] PHP Warning:  mb_ereg_match(): [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/2010/447.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>concrete5: MySQL ユーザーのパスワード</title>
		<link>http://www.natzworks.com/digital/entries/2010/000258.html</link>
		<comments>http://www.natzworks.com/digital/entries/2010/000258.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 06:27:53 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/wpd/216.html</guid>
		<description><![CDATA[オープンソースの CMS ツール concrete5 (5.3.3.1.ja) で使う MySQL ユーザーのパスワードに "@" が含まれていると、インストール時に 「データベースに接続出来ません」 とエラーになる。確かに "@" はユーザー名とサーバー名の区切り記号でもあるので微妙な文字と言えるが、phpMyAdmin では、同じユーザー名とパスワードで DB にアクセスできる。

ソースを見ると、MySQL ユーザーのパスワードは config/site.php 中で定数 DB_PASSWORD として定義され、concrete/controllers/install.php から呼び出される関数 db() (concrete/libraries/loader.php で定義) で、変数 $dsn に

$dsn = DB_TYPE . '://' . DB_USERNAME . ':' . DB_PASSWORD . '@' . DB_SERVER . '/' . DB_DATABASE;

と格納され、concrete/libraries/3rdparty/adodb/adodb.inc.php 中の関数 ADONewConnection() で処理されて行く過程が追える。しかし "@" が通るように何とか頑張る、と言うのは本質ではないので、素直に 「"@" を使わない」 のが、スマートな解決策だろう。
とりあえず [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/entries/2010/000258.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>concrete5: CacheExecute() エラー</title>
		<link>http://www.natzworks.com/digital/entries/2010/000248.html</link>
		<comments>http://www.natzworks.com/digital/entries/2010/000248.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 11:17:01 +0000</pubDate>
		<dc:creator>Natz</dc:creator>
				<category><![CDATA[concrete5]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://www.natzworks.com/wpd/207.html</guid>
		<description><![CDATA[オープンソースの CMS ツール concrete5 で (主にインストール完了後のログイン時等)、インストール自体に問題はなくても、ページ遷移にとんでもない時間がかかった挙句、

Fatal error:  Uncaught exception 'ADODB_Exception' with message 'mysql error: [-32000: Cache write error] in CacheExecute(/path/to/concrete5/files/cache/44/adodb_44fc42cc5a97ebf36998ee03c5f663ed.cache, select ctID from PageTypes)' in /path/to/concrete5/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php:78


と言うエラーに遭遇することがある。僕は某案件で使う予定の concrete5.3.3.1 日本語版でテストサイトを構築した際に、上記の不具合が発生した。concrete5 のインストールは何度もやっている上に、今回不具合が発生した同じサーバーでは、既に別の concrete5 が普通に動いている。違いがわからず困惑したが、エラーメッセージを頼りに調べてみると、ここで原因と解決方法が見つかった。

どうも concrete5 のキャッシュ・ディレクトリ /files/cache/ が NFS マウントされた場所にあると、Web サーバーが書き込めるパーミッション設定であっても、具合が悪いらしい。確かに同じサーバー上にある別の concrete5 サイトを始め、今までにインストールしたいくつかの concrete5 は、いずれも NFS とは無縁だった。
以下のように別の場所にキャッシュ・ディレクトリを作成してシンボリック・リンクを張ると、何事もなかったかのように動いた。


・移動
# cd /path/to/concrete5/files/

・キャッシュ・ディレクトリを削除
# rm -rf cache

・非 NFS な場所にキャッシュ・ディレクトリを作成
# mkdir -p /path/to/noNFS/concrete5/files/cache

・ディレクトリのグループを Apache [...]]]></description>
		<wfw:commentRss>http://www.natzworks.com/digital/entries/2010/000248.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

