2008年12月25日木曜日
2008年12月24日水曜日
RailsとMerbが統合するらしい
「Railsよりお薦め!Rubyのフレームワーク Merb (Mongrel + Erb) をインストール」の記事がなぜか突然人気だなと思ったら、RailsとMerbが統合!するらしい。
DHHがMerbをコアにしてRails3を作るらしいけど、Merbのファサードを絞ったシンプルさが、DHH的な知らないと分からない隠れ規約に飲み込まれないかちょっと心配。
でもMerbもこのままマイナーなままよりはメジャーになった方が、Railsともどもお互い幸せなのかもね。
ついでにWeb Flavorも関係ないけどブレイクしないかな!
あ、Rails2のアプリはまた置き去りにされるのか...。
DHHがMerbをコアにしてRails3を作るらしいけど、Merbのファサードを絞ったシンプルさが、DHH的な知らないと分からない隠れ規約に飲み込まれないかちょっと心配。
でもMerbもこのままマイナーなままよりはメジャーになった方が、Railsともどもお互い幸せなのかもね。
ついでにWeb Flavorも関係ないけどブレイクしないかな!
あ、Rails2のアプリはまた置き去りにされるのか...。
2008年12月22日月曜日
MySQLの timestampの自動更新ができない場合の修復方法
例えばcreated_atにはINSERT文でvalueにシステム時刻をセットし、updated_atは自動更新させることを想定している場合。
下記のように、間違えてtimestamp型の列を複数定義すると、2つ目以降のtimestampは初期値がオールゼロになり、自動更新もされない。
間違いに気づいて、Query Browserからテーブル定義を変更(created_atをdatetimeにして、updated_atのdefaultにCURRENT_TIMESTAMPをセット)しても、自動更新はされない。
なぜなら、Query Browserからテーブル定義を変更してtimestampにした場合、下記のようにON UPDATEの定義が無いから。
Query Browserは、外部KEY以外のトリガーを作成できない。
なのでSQL文(DDLTDL)で列の定義を修正する。
修正できた。
参考:MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文
下記のように、間違えてtimestamp型の列を複数定義すると、2つ目以降のtimestampは初期値がオールゼロになり、自動更新もされない。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
間違いに気づいて、Query Browserからテーブル定義を変更(created_atをdatetimeにして、updated_atのdefaultにCURRENT_TIMESTAMPをセット)しても、自動更新はされない。
なぜなら、Query Browserからテーブル定義を変更してtimestampにした場合、下記のようにON UPDATEの定義が無いから。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query Browserは、外部KEY以外のトリガーを作成できない。
なのでSQL文(DDL
ALTER TABLE members MODIFY updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
修正できた。
DROP TABLE IF EXISTS `test`.`members`;
CREATE TABLE `test`.`members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
参考:MySQL :: MySQL 5.1 リファレンスマニュアル :: 12.1.2 ALTER TABLE 構文
MySQLで Database (Schema)を作成するDDL
よく忘れるのでメモメモ。
文字コードがデフォルトでよい場合は指定不要。
文字コードがデフォルトでよい場合は指定不要。
CREATE DATABASE データベース名 CHARACTER SET utf8;
2008年12月6日土曜日
mysql_conncet()で hostを localshotとする場合と127.0.0.1とする場合の違い
PHPのmysql関数の話。PDOを使えば関係ないかも。
mysql_connect()でhostにlocalhostを指定すると接続エラーになり、127.0.0.1を指定すると接続できること(環境)がある。
原因:
mysql_conncet()では、localhostの場合unixソケットを使い、127.0.0.1の場合はTCP/IP接続を使うため、らしい。
(Windowsの場合は実行ファイルの呼び出し???)
参考:codeなにがし::mysql_connect()のホスト名にlocalhostを指定するとソケット接続になる
こちらも参考:MAMP環境CakePHP1.2のbakeでSQL接続エラー - ElectronicBrain is eating BreakFast
mysql_connect()でhostにlocalhostを指定すると接続エラーになり、127.0.0.1を指定すると接続できること(環境)がある。
原因:
mysql_conncet()では、localhostの場合unixソケットを使い、127.0.0.1の場合はTCP/IP接続を使うため、らしい。
(Windowsの場合は実行ファイルの呼び出し???)
参考:codeなにがし::mysql_connect()のホスト名にlocalhostを指定するとソケット接続になる
こちらも参考:MAMP環境CakePHP1.2のbakeでSQL接続エラー - ElectronicBrain is eating BreakFast
PHPで SJIS-winを使う
メモ。
PHPで UTF-8←→SJIS の変換を行う場合の注意 : 地方で活動するweb制作者の日々を綴るblog
[php] mb_convert_encoding と UTF-8 の誤変換問題 ( しゃいん☆のブログ| 名古屋市 Webシステム開発 サーバ構築 ネットワーク構築 株式会社コネクティボ )
ke-tai.org > Blog Archive > PHPで絵文字を壊さずに文字コードや全角半角変換を行う方法
mobile、SJIS SJIS-win mb_convert_encodingとhtmlspecialchars - 。
Y's Blog | PHPでUTF-8からSJIS-winへの変換ではまる
sjisは使わずにSJIS-win使えば問題無い?
PHPで UTF-8←→SJIS の変換を行う場合の注意 : 地方で活動するweb制作者の日々を綴るblog
[php] mb_convert_encoding と UTF-8 の誤変換問題 ( しゃいん☆のブログ| 名古屋市 Webシステム開発 サーバ構築 ネットワーク構築 株式会社コネクティボ )
ke-tai.org > Blog Archive > PHPで絵文字を壊さずに文字コードや全角半角変換を行う方法
mobile、SJIS SJIS-win mb_convert_encodingとhtmlspecialchars - 。
Y's Blog | PHPでUTF-8からSJIS-winへの変換ではまる
sjisは使わずにSJIS-win使えば問題無い?
Googleの Sitemapにフィードを登録する場合の注意点
Google ウェブマスター ツールではSitemapとしてフィードを登録することができるが、いくつか注意点が。
1. 登録できるフィードはRSS2.0かAtom1.0のみ
参考:
雑記帳?一応Weblog - Atom 1.0キボン
サイトマップの作成 - ウェブマスター向けヘルプ センター
2.
Atom1.0の仕様としてはupdatedは必須だが、publishedは必須ではないのだが。
参考:
Error in parsing sitemap for Atom Feed - Invalid XML tag - Sitemap Protocol | Google グループ
RFC 4287 The Atom Syndication Format 日本語訳 - futomi's CGI Cafe (Atom1.0仕様書の和訳)
(2008/1/7 追記)
いつの間にか、Atom1.0でエントリーにpublishedが無くてもエラーにならなくなっていた。
RewriteCondで条件によって別のRewriteBaseを使う
できないみたい。
CakePHPで試してみたらできるようだ。
CakePHPではWebのルート直下以外にCakeのホームディレクトリを作ろうとするとRewriteBaseの設定が必要になる。
上記の方法を使えば複数のディレクトリのように見せることができそう。
参考:mod_rewrite - Apache HTTP Server (和訳無し)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA]
RewriteCond %{REQUEST_URI} ^/foo
RewriteBase /foo
RewriteCond %{REQUEST_URI} ^/bar
RewriteBase /bar
</IfModule>
CakePHPではWebのルート直下以外にCakeのホームディレクトリを作ろうとするとRewriteBaseの設定が必要になる。
上記の方法を使えば複数のディレクトリのように見せることができそう。
参考:mod_rewrite - Apache HTTP Server (和訳無し)
PHPのmb_send_mail()でのSMTPエラー(550 5.7.1)の解消方法
PHPのmb_send_mail()からIISの簡易SMTPサーバを使ってメールを送信しようとしたとき、下記のエラーが発生。
原因はSMTPサーバがデフォルト設定で、中継を許可していなかったため。
中継を許可するIPアドレスに127.0.0.1を加えたらメールが送信できるようになった。
PHP Warning: mb_send_mail() [<a href='function.mb-send-mail'>function.mb-send-mail</a>]: SMTP server response: 550 5.7.1 Unable to relay for ...
原因はSMTPサーバがデフォルト設定で、中継を許可していなかったため。
中継を許可するIPアドレスに127.0.0.1を加えたらメールが送信できるようになった。